2013-11-27 76 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() 

这将帮助你检测,如果你的系统没有足够的内存,或者如果它是一个问题,你的码。