2013-11-27 69 views
9

一直試圖運行射頻分類器的數據集約50,000條目與20個左右的標籤,我認爲應該罰款,但我總是遇到以下內容時,試圖適應...隨機森林分類器分段錯誤

Exception MemoryError: MemoryError() in 'sklearn.tree._tree.Tree._resize' ignored 
Segmentation fault (core dumped) 

已將數據集通過TfidfVectorizer,然後使用n = 100的TruncatedSVD進行降維。 RandomForestClassifier以n_jobs = 1和n_estimators = 10運行,試圖找到它將工作的最小點。該系統使用4GB的RAM運行,過去RF在類似的數據集上運行,估計數量更多。Scikit-learn在當前版本0.14.1下運行。

任何提示?

謝謝

+2

嘗試在少量的數據或更低的數據上運行它。看看是否出現相同的錯誤。我也有4GB的內存,我在一些非常大的數據集上使用了隨機森林(不是這麼大),並且從來沒有得到過這個錯誤。請告訴我,如果在降低時仍然會出現同樣的錯誤。 –

+5

如果它是可複製的,你應該在[sckikit bug跟蹤器](https://github.com/scikit-learn/scikit-learn/issues)上報告。 –

+0

我會盡量減少@RyanSaxe建議的數據集大小。我已經在比這個大得多的數據集上運行RF,但是可以訪問非常大量的RAM –

回答

1

Segfaults總是bug。如果mallocRandomForest內部失敗,那麼它應該被捕獲,並且這是我最好的猜測,這就是發生在你身上的事情。正如一位評論者所說的,你應該向RandomForest bug跟蹤器報告這一點。但malloc可能是因爲內存不足而失敗,所以請減少維度,減少訓練數據集大小,獲取更多內存,或在具有更多內存的系統上運行。

+0

http://stackoverflow.com/questions/4220965/segmentation-fault-due-to-lack-of-memory-in-c – denson

0

嘗試使用'psutil'庫(鏈接:https://pypi.python.org/pypi/psutil/0.5.0)。多虧了這個庫,你可以monitorize具有以下功能系統的可用內存量:

psutil.phymem_usage() 

這將幫助你檢測,如果你的系統沒有足夠的內存,或者如果它是一個問題,你的碼。