Language agnostic PCA在超大稀疏矩阵上的应用

Language agnostic PCA在超大稀疏矩阵上的应用,language-agnostic,machine-learning,sparse-matrix,pca,Language Agnostic,Machine Learning,Sparse Matrix,Pca,我正在用R做一个文本分类任务,我得到了一个大小为22490×120000的文档术语矩阵(只有400万个非零条目,少于1%的条目)。现在我想利用PCA(主成分分析)来降低维度。不幸的是,R无法处理这个巨大的矩阵,所以我将这个稀疏矩阵存储在“矩阵市场格式”的文件中,希望使用其他一些技术来进行PCA 那么,有谁能给我一些有用的库的提示(不管编程语言是什么),这些库可以轻松地对这个大规模矩阵进行PCA,或者我自己做一个简单的PCA,换句话说,首先计算协方差矩阵,然后计算协方差矩阵的特征值和特征向量 我想

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

那么,有谁能给我一些有用的库的提示(不管编程语言是什么),这些库可以轻松地对这个大规模矩阵进行PCA,或者我自己做一个简单的PCA,换句话说,首先计算协方差矩阵,然后计算协方差矩阵的特征值和特征向量

我想要的是计算所有PC(120000),并只选择前N个PC,它们占90%的差异。显然,在这种情况下,我必须事先给出一个阈值,将一些非常微小的方差值设置为0(在协方差矩阵中),否则协方差矩阵将不会稀疏,其大小将是120000乘120000,这是单台机器无法处理的。此外,荷载(特征向量)将非常大,应以稀疏格式存储

非常感谢您的帮助

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

Python toolkit有几个PCA变体,其中可以处理由支持的任何格式的稀疏矩阵。应该能够解析矩阵市场格式(尽管我从未尝试过)

免责声明:我是scikit学习开发团队的成员


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

您可以尝试潜在Dirichlet分配(LDA),它将文档单词矩阵分解为文档主题和主题单词矩阵,而不是运行PCA。这里有一个R实现的链接:-有相当多的实现,但是如果你用谷歌搜索的话

使用LDA,您需要提前指定固定数量的主题(类似于主要组件)。一个可能更好的替代方法是HDP-LDA(),它可以了解构成语料库良好表示形式的主题数量

如果您可以将数据集放入内存中(看起来您可以),那么运行LDA代码也不会有问题


正如scicomp论坛上的许多人指出的那样,不需要计算所有120k主分量。算法如计算矩阵的最大特征值,LDA算法将收敛到给定指定主题数量的数据的最小描述长度表示。

在R
big中。PCA
of
bigpca
包完成此工作

文本分类任务

我决定使用一种新的方法。 这种技术可以处理非常大的稀疏矩阵。 显示如此简单的PCA输出word2vec。
它的意图是简单PCA优于LDA。

我不确定它是否100%正确,但我认为MatLab可以完成这项工作。如果您在这里没有任何乐趣,可能值得在@aix上询问。谢谢您的建议,我已将其移至计算科学测试版,并获得一些有用的提示。你也可以在这个@EnsomHodder上关注它:我不知道那个新网站。看起来很有趣,感谢您指出:)非常感谢@larmans,在某种程度上,您提出的方法可以对稀疏矩阵进行PCA,但由于占用大量内存,它只能计算少量PC:-(注意,
RandomizedPCA
已被弃用,取而代之的是带有关键字参数的
svd\u solver='randomized'