使用Scikit-Learn和Gensim的SVD具有600万个功能

时间:2017-02-18 14:30:57

标签: python scikit-learn gensim svd

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

我尝试过gensim和sklearn的SVD功能。两者都可以正常工作,直到100减少功能,但是当我尝试200个功能时,它们会引发内存错误。

另外我没有使用整个文件(60万)作为训练数据,我只采用了50000个文件。基本上我的训练矩阵是: 50000 * 600万,并希望将其减少到50000 *(100到500)

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

系统规格:ubuntu 14.04上具有4个核心处理器的32 Gb RAM

1 个答案:

答案 0 :(得分:0)

我真的不明白为什么使用spark mllib SVD可以提高性能或避免内存错误。您只需超过RAM的大小。你有一些选择来解决这个问题:

  • 减少tf-idf的字典大小(例如,使用scikit-learn的max_df和min_df参数)。
  • 使用散列矢量图而不是tf-idf。
  • 获取更多内存(但在某些时候tf-idf + SVD不可扩展)。

此外,您应该显示您的代码示例,您可能在您的python代码中做错了。