在推文上执行SVD。记忆问题

时间:2010-05-12 12:23:12

标签: matrix data-mining svd

编辑:我的单词列表大小比我写下的大10-20倍。我只是忘了零。

EDIT2:我将介绍SVDLIBC,并了解如何将矩阵缩减到其密集版本,这样也可能有所帮助。

我已经生成了一个巨大的csv文件作为我的pos标记和词干的输出。它看起来像这样:

        word1, word2, word3, ..., word 150.000
person1   1      2      0            1
person2   0      0      1            0
...
person650

它包含每个人的单词计数。像这样,我得到每个人的特征向量。

我想在这个野兽上运行一个SVD,但似乎矩阵太大而无法保存在内存中以执行操作。我的问题是:

  • 我应该通过删除列总和为例如1的单词来减小列大小,这意味着它们只被使用过一次。这次尝试是否会过度偏向数据?

  • 我尝试了通过将csv加载到db中的rapidminer尝试。然后按照批量处理顺序读取它,就像rapidminer提出的那样。但Mysql无法在表中存储那么多列。如果我转置数据,然后在导入时重新转发它也需要很长时间......

- >所以一般来说,我正在寻求建议如何在这样的语料库上执行一个svd。

2 个答案:

答案 0 :(得分:1)

这是一个很大的密集矩阵。然而,它只是一个小的稀疏矩阵。

使用稀疏矩阵SVD算法就足够了。例如here

答案 1 :(得分:-1)

SVD受内存大小的限制。参见:

Folding In:关于部分矩阵更新的论文。

Apache Mahout是一个分布式数据挖掘库,在hadoop上运行,具有并行SVD