2017-02-18 88 views
0

我試圖根據他們的觀點對段落進行分類。我有60萬個文件的訓練數據。當我將它們轉換爲Tf-Idf向量空間時,詞語作爲分析器,ngram範圍爲1-2,有近600萬個特徵。所以我必須做奇異值分解(SVD)來減少特徵。使用Scikit-Learn和具有600萬功能的Gensim的SVD

我試過gensim和sklearn的SVD功能。兩者都可以正常使用,直到100功能減少爲止,但只要我嘗試使用200個功能,它們會拋出內存錯誤。

另外我還沒有使用整個文件(60萬)作爲訓練數據,我只拿到了50000個文件。所以基本上我的訓練矩陣是: 50000 * 600萬,並希望減少到50000 *(100到500)

是否有任何其他方式我可以在Python中實現它,或者我必須實現火花mllib SVD (只寫java和scala)?如果是,那麼速度會快多少?

系統規格:32 GB RAM,4個核處理器在Ubuntu 14.04

回答

0

我真的不明白爲什麼用火花mllib SVD會提高性能或避免內存錯誤。你只是超出你的RAM的大小。你有一些選項來處理:

  • 減少你的tf-idf的字典大小(例如使用scikit-learn的max_df和min_df參數來玩)。
  • 使用哈希向量化器而不是tf-idf。
  • 獲得更多RAM(但在某些時候tf-idf + SVD不可擴展)。

此外,你應該顯示你的代碼示例,你可能會在你的python代碼中做錯了什麼。

+0

感謝您的建議。我應該玩弄max_df和min_df參數。另外我還沒有看過哈希矢量化器,所以我會看看我能用它做什麼。 – dudefrmbgr