使用 Scikit-Learn 和 Gensim 的 SVD 具有 600 万个特征

SVD using Scikit-Learn and Gensim with 6 million features

我正在尝试根据他们的情绪对段落进行分类。我有 60 万份文件的训练数据。当我将它们转换为 Tf-Idf 向量 space 时,单词作为分析器,ngram 范围为 1-2,有将近 600 万个特征。所以我必须做奇异值分解(SVD)来减少特征。

我试过gensim和sklearn的SVD功能。两者都可以很好地减少功能直到 100,但是一旦我尝试 200 个功能,它们就会抛出内存错误。

另外我没有用整个文档(60万)作为训练数据,我只取了50000个文档。所以基本上我的训练矩阵是: 50000 * 600 万,想减少到 50000 *(100 到 500)

有没有其他方法可以在 python 中实现它,或者我是否必须实现 sparks mllib SVD(仅为 java 和 scala 编写)?如果是,会快多少?

系统规格:32 Gb RAM,4 核处理器,ubuntu 14.04

我真的不明白为什么使用 sparks mllib SVD 会提高性能或避免内存错误。您只是超出了 RAM 的大小。你有一些选择来处理这个问题:

  • 减少 tf-idf 的字典大小(例如,使用 scikit-learn 的 max_df 和 min_df 参数)。
  • 使用哈希矢量化器代替 tf-idf。
  • 获取更多 RAM(但在某些时候 tf-idf + SVD 不可扩展)。

您还应该展示您的代码示例,您的 python 代码可能会出错。