首页 文章

在非常大的稀疏矩阵上应用PCA

提问于
浏览
16

我正在使用R进行文本分类任务,并且我获得了一个大小为22490×120,000的文档术语矩阵(只有400万个非零条目,少于1%的条目) . 现在我想通过利用PCA(主成分分析)来降低维数 . 遗憾的是,R无法处理这个巨大的矩阵,所以我将这个稀疏矩阵存储在“矩阵市场格式”的文件中,希望使用其他一些技术来做PCA .

因此,任何人都可以给我一些有用库(无论编程语言)的提示,它可以轻松地使用这个大型矩阵进行PCA,或者自己做一个简单的PCA,换句话说, calculate the covariance matrix at first, and then calculate the eigenvalues and eigenvectors for the covariance matrix .

我想要的是 calculate all PCs (120,000), and choose only the top N PCs, who accounts for 90% variance . 显然,在这种情况下,我必须先给出一个阈值,将一些非常小的方差值设置为0(在协方差矩阵中),否则,协方差矩阵将不会稀疏,其大小将为120,000乘120,000,这是用一台机器无法处理 . 此外,载荷(特征向量)将非常大,并且应以稀疏格式存储 .

非常感谢您的帮助!

注意:我使用的是具有24GB RAM和8个CPU内核的机器 .

4 回答

  • 7

    Python工具包scikit-learn有一些PCA变体,其中RandomizedPCA可以处理scipy.sparse支持的任何格式的稀疏矩阵 . scipy.io.mmread应该能够解析Matrix Market格式(我从未尝试过) .

    免责声明:我是scikit-learn开发团队的成员 .

    EDIT :来自 RandomizedPCA 的稀疏矩阵支持已在scikit-learn 0.14中弃用 . 应该使用 TruncatedSVD 代替它 . 有关详细信息,请参阅文档

  • 12

    您可以尝试使用Latent Dirichlet Allocation(LDA)代替运行PCA,LDA将文档字矩阵分解为文档主题和主题词矩阵 . 这是一个R实现的链接:http://cran.r-project.org/web/packages/lda/ - 有很多实现,但如果你谷歌 .

    使用LDA,您需要提前指定固定数量的主题(类似于主要组件) . 一个可能更好的替代方案是HDP-LDA(http://www.gatsby.ucl.ac.uk/~ywteh/research/npbayes/npbayes-r21.tgz),它可以学习构成语料库良好表示的主题数量 .

    如果你可以将我们的数据集放在内存中(你似乎可以),那么你也应该在运行LDA代码时遇到问题 .

    正如scicomp论坛上的一些人所指出的那样,不需要计算所有120k原理组件 . 像http://en.wikipedia.org/wiki/Power_iteration这样的算法计算矩阵的最大特征值,并且LDA算法将收敛到给定指定主题数量的数据的最小描述长度表示 .

  • 0

    bigpcabig.PCA 中,包http://cran.r-project.org/web/packages/bigpca/bigpca.pdf完成了这项工作 .

  • 1

    文本分类任务

    我使用technique for PCA of sparse matrix解决了almost same problem . 该技术可以处理非常大的稀疏矩阵 . The result显示了这样简单的PCA outperfoms word2vec . 它打算简单的PCA优于LDA .

相关问题