scikit-learn 中的并行随机森林抛出异常



我的sklearn版本是0.14.1,在linux Debian GNU/Linux 7.1上使用python 2.7

叫:

clf = RandomForestClassifier(min_samples_split = 10, n_estimators = 50 , n_jobs = 1) is ok

通话时:

clf = RandomForestClassifier(min_samples_split = 10, n_estimators = 50 , n_jobs = 5)
clf.fit(train.toarray(), targets)

引发以下异常:

Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 505, in run
self.target(self.__args, *self.__kwargs)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 342, in handletasks
put(task)
SystemError: NULL result without error in PyObject_Call

抛出异常后,随机森林的所有进程全部被阻塞

根据形状信息,数据集应为 ~4GB(对于单精度浮点数(。此异常可能是由多处理序列化数据以将其传递给工作进程时内存耗尽引起的。

要限制内存副本的数量,您可以尝试将sklearn/externals/joblib文件夹替换为符号链接或 joblib 存储库的主分支的 joblib 子文件夹的副本:https://github.com/joblib/joblib

joblib 的开发版本已得到改进,可将内存映射用于大型输入数组。这可能会解决您的问题。

编辑内存映射支持已登陆joblib 0.8+,默认情况下包含在scikit-learn 0.15+中

相关内容

  • 没有找到相关文章

最新更新