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


16

我正在使用R进行文本分类任务,并获得了文档项矩阵,其大小为22490 x 120,000(只有400万个非零条目,少于1%的条目)。现在,我想通过使用PCA(主成分分析)来减少尺寸。不幸的是,R无法处理这个庞大的矩阵,因此我将这个稀疏矩阵存储在“矩阵市场格式”的文件中,希望使用其他技术来进行PCA。

因此,任何人都可以给我一些有用的库(无论使用哪种编程语言)的提示,这些库可以轻松地使用此大规模矩阵进行PCA,或者由我自己进行长期的PCA,换句话说,首先要计算协方差矩阵,然后然后计算协方差矩阵的特征值和特征向量

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

非常感谢您的帮助!

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


矩阵有多稀疏?如何使用生成的SVD?如果只需要它的一部分,则可能会便宜得多。
阿诺德·纽迈耶

@ArnoldNeumaier对不起,我忘了添加稀疏信息。我已经更新了帖子以及完整的想法。
Ensom Hodder

到目前为止,答案中建议的SLEPc,mahout和irlba似乎都适合您的问题。
阿诺德·纽迈耶

1
为什么要计算所有 120k?听起来好像您只希望那些占方差90%的变量,但计算起来应该便宜得多。
杰德·布朗

@JedBrown嗨,Jed,您完全正确!我只对那些说明90%方差的人以及相应的特征向量(之后用于转换测试数据集)感兴趣。您能告诉我您更便宜的方法吗?
Ensom Hodder

Answers:


4

我建议使用irlba软件包-它产生的结果与svd几乎相同,但是您可以定义较少数量的奇异值来解决。可以在此处找到使用稀疏矩阵解决Netflix奖励的示例:http : //bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html


感谢您的意见。实际上,我昨天看了该视频并尝试了irlba软件包,但似乎只能将其用于计算一些奇异值。但是,正如帖子中所述,我想计算所有奇异值(120,000),以便根据它们引起的差异选择合适数量的PC。在这种情况下,我想irlba不再适合。
Ensom Hodder

能否以与PCA相似的方式使用SVD的结果?为了执行PCA,您是否不需要在进行SVD​​之前将数据居中?
Zach 2012年

@Zach-SVD是PCA背后的主要算法(请参阅prcomp-stat.ethz.ch/R-manual/R-patched/library/stats/html/prcomp.html)。数据居中也是接受PCA之前的标准过程,尽管根据您的问题有很多选择(例如,也可以使用不同类型的缩放比例)。
马克·马克(Marc)在

如果我不在SVD之前将数据居中,那有什么大不了的?我有一个适合内存的稀疏矩阵,但是居中会使其密集且太大而无法适合内存。
Zach 2012年

@Zach-这实际上取决于您要如何将样本相互关联。如果由于内存限制而无法使用居中数据,那么我想这个决定已经为您做出了决定。通常,居中数据使PCA在样本的协方差矩阵上运行,而数据的居中和缩放使PCA在相关矩阵上运行。有关这些决策的更多信息,您可以考虑在stats.stackexchange.com上提问,或者搜索有关PCA的现有答案。
盒子里的马克

8

我建议使用SLEPc计算部分SVD。请参阅第4章用户手册SVD手册页了解详情。


1
由于他想要PCA,因此必须在计算SVD之前将数据居中。这将破坏稀疏性。SLEPc是否可以通过某种方式适应这种情况?
dranxo 2012年

3
那只是稀疏+低等级。SLEPc不需要矩阵条目,只需要一个线性运算符即可用作稀疏矩阵和校正。
杰德·布朗

2

我投票赞成mahout,这对其他NLP / TA任务也很有利,并且实现了map / reduce。


是的,您是对的,mahout正是我的路线图。但是我更喜欢事先使用一些“简单”(我想)技术来创建原型。
Ensom Hodder

1

我建议使用增量奇异值分解,文献中有很多。例如:

所有这些方法可简化为以下几种:

  • 从一个小的数据集开始
  • 以某种方式计算SVD(对于单列矩阵,此步骤很简单)
  • 重复直到完成:
    • 添加新数据集
    • 使用现有的SVD和更新规则来计算新数据集的SVD

ñ


0

您仍然可以使用R。

Revolution R是R的内部版本,用于处理大于RAM的数据集。使用功能princomp

它还具有全面的统计功能,专门针对不适合RAM的大数据样式问题而设计,例如线性回归,逻辑回归,分位数等。

您可以通过勾选“我是学者”框免费下载功能齐全的学术版。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.