2015-11-27 80 views
0

我正在運行一個生成n-gram的文本機器學習算法。這當然會大量地擴大輸入的大小。把它放在上下文中,原始輸入是在一個文件中約30K行,在生成三元素之後,我有348000個條目。Python可以使用硬盤作爲額外的內存嗎?

我使用scikit及其TfidfVectorizer,如果給出的值太多,我會得到由numpy數組拋出的MemoryError。在我達到極限之前,我只能使用〜27500個卦。這意味着我只能使用最多10%的可用數據。

我能做些什麼來幫助解決這個問題?我有什麼選擇嗎?

+2

我相信這是一個真正的操作系統問題,因爲它是通過操作系統,可以分配一定量的磁盤空間作爲分頁或虛擬內存。但它會減慢速度*令人難以置信*。要麼找到一臺擁有更多內存的機器,要麼完全重新思考你的方法可能會更好。 – jme

+0

查看[這個問題](http://stackoverflow.com/questions/5537618/memory-errors-and-list-limits-in-python)瞭解一些信息。確保你使用的是64位Python而不是32位。 – bbayles

回答

0

正如@jme所提到的,python對OS的內存管理沒有影響。 可能最合理的方法(如果找不到具有更多RAM的機器)將以某種方式限制功能的數量,例如,與TfidfVectorizer以下選項參數中的一個:

max_df:漂浮在範圍[0.0,1.0]或者int,默認= 1.0

在構建詞彙忽略具有文檔頻率嚴格條件高於給定的閾值(語料庫專用停用詞)。如果爲float,則該參數表示文檔的比例,即整數絕對計數。如果詞彙不是無,則忽略此參數。

min_df:在浮球範圍[0.0,1.0]或者int,默認= 1

在構建詞彙忽略具有文檔頻率大於給定閾值低嚴格條件。這個值在文獻中也被稱爲截斷值。如果爲float,則該參數表示文檔的比例,即整數絕對計數。如果詞彙不是無,則忽略此參數。

max_features:int或無,默認=無

如果不是無,建立一個詞彙表,只考慮通過在語料庫詞頻排序頂部max_features。

如果詞彙不是無,則忽略此參數。

+0

我確實發現我的問題。事實證明,矢量化器非常高效,但如果你在矢量上調用toarray(),它會殺死內存。一旦我意識到,事情變得更好。 –

相關問題