【问题标题】:Performing PCA on a large dataset在大型数据集上执行 PCA
【发布时间】:2013-12-25 08:21:08
【问题描述】:

在 CountVectorizer 变为 (40,845 X 218,904) (unigram) 之后,我遇到了只有 2 个类和我的训练数据集矩阵大小的文档分类问题。在考虑三元组的情况下,它可以达到(40845 X 3,931,789)。有没有办法在这样的数据集上执行 PCA 而不会出现内存或稀疏数据集错误。我在 6GB 机器上使用 python sklearn。

【问题讨论】:

    标签: python-2.7 machine-learning scikit-learn


    【解决方案1】:

    您可以尝试使用稀疏 SVD,如通过 sklearn 中的 TruncatedSVD 实现的那样:

    http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html

    对文档数据集执行 SVD 是一种常用技术,通常称为潜在语义分析 (LSA)。 SVD 和 PCA 也非常相似。如果您想了解更多关于差异的信息,这个问题有一些很好的信息:

    https://math.stackexchange.com/questions/3869/what-is-the-intuitive-relationship-between-svd-and-pca

    【讨论】:

      【解决方案2】:

      如果您有 6GB RAM,那么您就有一台 64 位机器,因此最简单的解决方案可能就是增加您的 RAM。

      否则,请转帖:https://scicomp.stackexchange.com/questions/1681/what-is-the-fastest-way-to-calculate-the-largest-eigenvalue-of-a-general-matrix/7487#7487

      最近对此进行了一些很好的研究。新方法使用“随机算法”,只需读取少量矩阵即可在最大特征值上获得良好的准确性。这与需要多次矩阵向量乘法才能达到高精度的幂迭代形成对比。

      您可以在此处阅读有关这项新研究的更多信息:

      http://math.berkeley.edu/~strain/273.F10/martinsson.tygert.rokhlin.randomized.decomposition.pdf

      http://arxiv.org/abs/0909.4061

      此代码将为您完成:

      http://cims.nyu.edu/~tygert/software.html

      https://bitbucket.org/rcompton/pca_hgdp/raw/be45a1d9a7077b60219f7017af0130c7f43d7b52/pca.m

      http://code.google.com/p/redsvd/

      https://cwiki.apache.org/MAHOUT/stochastic-singular-value-decomposition.html

      如果您选择的语言不在其中,您可以很容易地推出自己的随机 SVD;它只需要矩阵向量乘法,然后调用现成的 SVD。

      【讨论】:

      • scikit-learn 实际上做了一个随机 SVD。问题在于矩阵的居中,这对于大型稀疏矩阵是不可行的。
      • Mahout 还必须处理居中问题。 SSVD 文档描述了他们如何处理它:cwiki.apache.org/confluence/download/attachments/27832158/…
      • 这是一个非常有趣的文档,但它没有描述他们如何在 SSVD 例程中进行隐式均值居中(仅解释了看不见的数据转换的分解)。知道 SVD 是如何完成的吗?
      • 第 4 页解决了均值居中问题。你是对的,他们没有解释存储问题。对于 SSVD,只需将 A-\Xi 应用于几个随机向量。由于 \Xi 是 rank-1,它可以作为 \xi^T*1 廉价地存储/应用。所以诀窍是应用 A 和 \xi^T*1 然后减去。备注:我还没有真正研究过代码,但我很确定这是怎么回事。
      【解决方案3】:

      如果您不需要太多组件(通常不需要),您可以计算主组件iteratively。我一直认为这在实践中就足够了。

      【讨论】:

        猜你喜欢
        • 2020-08-07
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2012-11-05
        • 2018-09-11
        • 2012-09-22
        • 1970-01-01
        • 2014-10-05
        相关资源
        最近更新 更多