Scikit learn 如何限制sklearn中岭回归模型使用的处理器数量?
我想对不同的机器学习模型做一个公平的比较。但是,我发现岭回归模型将自动使用多个处理器,并且没有参数可以限制使用的处理器数量(例如n_作业)。有什么可能的办法解决这个问题吗 一个简单的例子:Scikit learn 如何限制sklearn中岭回归模型使用的处理器数量?,scikit-learn,Scikit Learn,我想对不同的机器学习模型做一个公平的比较。但是,我发现岭回归模型将自动使用多个处理器,并且没有参数可以限制使用的处理器数量(例如n_作业)。有什么可能的办法解决这个问题吗 一个简单的例子: 从sklearn.datasets导入进行回归 从sklearn.linear_模型导入RidgeCV 特征,目标=make_回归(n_样本=10000,n_特征=1000) r=脊状CV() r、 适合(特征、目标) 打印(r.分数(特征、目标)) 此处尝试查看此处,我认为您可以使用njobs参数设置计算的
从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中进行设置。例如,请参见基于forRidgeCV的:
具有内置交叉验证的岭回归
默认情况下,它执行遗漏交叉验证,这是一种有效的遗漏交叉验证形式
默认情况下,您使用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()
)隐式调用该过程)。不幸的是,这不是一个有用的度量。您的操作系统是什么?