【发布时间】:2010-05-12 12:23:12
【问题描述】:
编辑:我的单词表大小是我写下的 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 的单词来减小列大小,这意味着它们只被使用过一次。我是否因为这种尝试而过度偏向数据?
我尝试了 rapidminer,将 csv 加载到数据库中。然后像 rapidminer 建议的那样,按批次顺序读取它进行处理。但是Mysql不能在一个表中存储那么多列。如果我转置数据,然后在导入时重新转置它也需要很长时间......
--> 所以总的来说,我是在寻求建议,如何在这样的语料库上执行 svd。
【问题讨论】:
-
你想要多少个奇异值?只有几个最小的或最大的?矩阵的维度真的只有 650 x 14400 吗?如果是这样,那根本不是很大。我能够在不到 5 秒的时间内在我的笔记本电脑上生成一个这种大小的随机矩阵并在 matlab 中计算一个完整的 SVD。我经常处理比这大得多的矩阵。相关地,你需要奇异向量吗?请记住,矩阵 A 的奇异值是 AAt 的特征值的正平方根,其中 At 表示矩阵 A 的转置。 AAt 是一个小矩阵。
标签: matrix data-mining svd