0

我的 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

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

4

1 回答 1

2

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

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

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

编辑内存映射支持已登陆 joblib 0.8+ 并且默认包含在 scikit-learn 0.15+

于 2013-10-14T11:50:26.173 回答