python - scikit learn 中不能使用超过 10 个内核

标签 python scikit-learn

我正在尝试在 32 核服务器上使用 sciki-learn(0.17.1)。操作系统是Ubuntu 14.04.1,python版本是2.7.12。当我尝试运行类似

的东西时
etr_init = RandomForestRegressor(n_jobs = -1)
etr_model = etr_init.fit(trn_x, y)

只有 10 个核心在运行。还需要其他配置吗?

最佳答案

sklearn 中的大多数算法仅支持拟合级别的并行性(意思是:每次拟合都使用一个核心)。这尤其有助于交叉验证和网格搜索。

幸运的是,您正在使用一些易于并行化的算法(集成方法的自然特征),并获得了一些比拟合级别方法更精细的特殊多处理处理。

在您的情况下,创建 RandomForestRegressor(n_jobs=-1) 使用默认值:

n_estimators:整数,可选(默认=10)

由于 sklearn 对于 RandomForestRegressor并行化能力仅限于不同的树(内部组件),因此您只能使用10 个核心(因为您使用的是 10 x 树 = 10 x DecisionTreeRegressor)。

使用:

etr_init = RandomForestRegressor(n_estimators=32, n_jobs = -1)
etr_model = etr_init.fit(trn_x, y)

可能会使用更多核心。

是否使用 32 个核心仍然值得怀疑,因为 SMT/HT 核心并不总是被计算在内(并且可能存在于您的集群上)。 并不总是并不意味着它在 sklearn 中是不确定的,但是不同的线程/多处理库使用不同的规则,我不知道 sklearn 或使用的内部组件 = joblib 是如何工作的(非相关的流行示例:据我记得,x264 使用了 1.5 * 总核心数(包括 HT)。

我对 sklearn 仅在 #-trees 级别使用多处理的猜想可以通过查看文档来推断(同时知道 RandomForest 是什么):

  • DecisionTreeRegressor不支持参数n_jobs。 (某个 RandomForestRegressor 的每个估计量都是 DecisionTreeRegressor)

关于python - scikit learn 中不能使用超过 10 个内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41770471/

相关文章:

python - Selenium:动态加载页面导致自动滚动失败

python - 什么时候重置索引? loc 与 iloc 的索引差距?最佳实践?

python - 向通过 pool.map 调用的函数添加状态——如何避免酸洗错误

python - 测试准确率较低但 AUC 分数较高的可能原因

python - 大数据增量PCA

python - 在 Scikit 中进行文本分类时是否需要标准化数据

python - RandomForest,如何选择最优的n_estimator参数

python - 在 Debian 上使用 Python 编写 Bencode?

Python Time Delta时间数据与格式不匹配错误,找不到我的错误

python - Scikit学习中的线性回归和梯度下降?