Scikit learn 如何限制sklearn中岭回归模型使用的处理器数量?

Scikit learn 如何限制sklearn中岭回归模型使用的处理器数量?,scikit-learn,Scikit Learn,我想对不同的机器学习模型做一个公平的比较。但是,我发现岭回归模型将自动使用多个处理器,并且没有参数可以限制使用的处理器数量(例如n_作业)。有什么可能的办法解决这个问题吗 一个简单的例子: 从sklearn.datasets导入进行回归 从sklearn.linear_模型导入RidgeCV 特征,目标=make_回归(n_样本=10000,n_特征=1000) r=脊状CV() r、 适合(特征、目标) 打印(r.分数(特征、目标)) 此处尝试查看此处,我认为您可以使用njobs参数设置计算的

我想对不同的机器学习模型做一个公平的比较。但是,我发现岭回归模型将自动使用多个处理器,并且没有参数可以限制使用的处理器数量(例如n_作业)。有什么可能的办法解决这个问题吗

一个简单的例子:

从sklearn.datasets导入进行回归
从sklearn.linear_模型导入RidgeCV
特征,目标=make_回归(n_样本=10000,n_特征=1000)
r=脊状CV()
r、 适合(特征、目标)
打印(r.分数(特征、目标))

此处尝试查看此处,我认为您可以使用njobs参数设置计算的内核数。

如果您将环境变量
OMP\u NUM\u THREADS
设置为
n
,您将获得预期的行为。例如,在linux上,请在终端中导出OMP_NUM_THREADS=1,以限制使用1个cpu

根据您的系统,您还可以直接在python中进行设置。例如,请参见基于for
RidgeCV的:

具有内置交叉验证的岭回归

默认情况下,它执行遗漏交叉验证,这是一种有效的遗漏交叉验证形式

默认情况下,您使用
None
-来使用有效的遗漏交叉验证

另一种方法是
岭回归
交叉验证

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import Ridge
clf = Ridge(a)
scores = cross_val_score(clf, features, target, cv=1, n_jobs=1)
print(scores)

另请参阅和的文档。

试图在@PV8 answer上进一步展开,当您实例化
RidgeCV()
的实例而不显式设置
cv
参数(如您的情况)时,会发生什么情况,即运行一个有效的遗漏交叉验证(根据参考的算法,实现)

另一方面,当将
cv
参数显式传递到
RidgeCV()
时,会发生以下情况:

  model = Ridge()
  parameters = {'alpha': [0.1, 1.0, 10.0]}
  gs = GridSearchCV(model, param_grid=parameters)
  gs.fit(features, target)
  print(gs.best_score_)
(如您所见),即您将使用默认的
n_jobs=None

最重要的是,正如
sklearn
核心开发人员之一所指出的,您正在试验的问题可能不依赖于
sklearn
,而是依赖于

[…]您的numpy设置以并行方式执行矢量化操作


(矢量化操作在计算效率高的LOO交叉验证过程中执行,您通过不将
cv
传递到
RidgeCV()
)隐式调用该过程)。

不幸的是,这不是一个有用的度量。您的操作系统是什么?