在大型数据集上执行PCA

时间:2013-12-08 04:55:16

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

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

3 个答案:

答案 0 :(得分:5)

您可以尝试使用稀疏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

答案 1 :(得分:4)

如果你有6GB的内存,你就拥有了64位的机器,那么最简单的解决方案可能只是提升你的内存。

否则,交叉点: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。

答案 2 :(得分:0)

如果您不需要太多组件(通常不需要),则可以计算主要组件iteratively。我总是发现这在实践中已经足够了。