sklearn Logistic Regression with n_jobs=-1 实际上并没有并行化

Posted

技术标签:

【中文标题】sklearn Logistic Regression with n_jobs=-1 实际上并没有并行化【英文标题】:sklearn Logistic Regression with n_jobs=-1 doesn't actually parallelize 【发布时间】:2017-01-29 22:02:31 【问题描述】:

我正在尝试使用 sklearn 的逻辑回归来训练一个庞大的数据集。 我已经设置了参数n_jobs=-1(也试过n_jobs = 5, 10, ...),但是当我打开htop时,我可以看到它仍然只使用一个核心。

是不是说逻辑回归只是忽略了 n_jobs 参数?

我该如何解决这个问题?我真的需要这个过程变得并行......

附:我正在使用 sklearn 0.17.1

【问题讨论】:

【参考方案1】:

并行进程后端也依赖于求解器方法。如果您想使用多核,则需要multiprocessing 后端。

但像 'sag' 这样的求解器只能使用 threading 后端。

而且大多数情况下,它可能会由于大量的预处理而被阻止。

【讨论】:

如果您能用一个在 sklearn 上使用 n_jobs 的工作示例进行说明,那就太好了【参考方案2】:

如果您仔细阅读他们的instructions,有多种原因。 可以试试这组参数吗:

    logit = LogisticRegression(penalty='l2',
                       random_state=42,
                       C=0.2,
                       n_jobs=-1,
                       solver='sag',
                       multi_class='ovr',
                       max_iter=200,
                       verbose=10
                      )

启动多个线程需要一两分钟。

【讨论】:

以上是关于sklearn Logistic Regression with n_jobs=-1 实际上并没有并行化的主要内容,如果未能解决你的问题,请参考以下文章

sklearn了解一下

用于Logistic回归评估的Sklearn Python Log Loss引发了错误

用于 Logistic 回归评估的 Sklearn Python Log Loss 引发错误

Sklearn - 从Logistic回归中返回前三类

基于sklearn进行线性回归logistic回归svm等的简单操作总结

sklearn Logistic回归中的C参数是啥?