【问题标题】:sklearn increasing number of jobs leads to slow trainingsklearn 越来越多的工作导致培训缓慢
【发布时间】:2015-11-20 01:16:25
【问题描述】:

我一直试图让 sklearn 在网格搜索期间使用更多的 cpu 内核(在 Windows 机器上执行此操作)。代码是这样的:

parameters = {'n_estimators': numpy.arange(1,10), 'max_depth':numpy.arange(1,10)}

estimator = RandomForestClassifier(verbose=1)

clf = grid_search.GridSearchCV(estimator, parameters, n_jobs=-1)
clf.fit(features_train, labels_train)

我正在一个只有 100 个样本的小型数据集上对此进行测试。

当 n_jobs 设置为 1(默认)时,一切都会正常进行并很快完成。但是,它只使用 1 个 cpu 核心。

在上面,我将 n_jobs 设置为 -1 以使用所有 cpu 内核。当我这样做时(或者如果我使用任何大于 1 的值),我可以看到我的机器上正在使用正确数量的内核,但是速度非常慢。当 n_jobs = 1 时,训练在大约 10 秒内完成。任何大于 1 的东西,训练可能需要 5-10 分钟。

增加gridsearch使用的核心数量的正确方法是什么?

【问题讨论】:

  • 您的代码对我来说似乎是正确的。你的sklearn 是什么版本?你能在另一台机器上试试你的代码吗(也许有不同的操作系统)?
  • 我使用的是 0.16.1 版。不幸的是,我无法访问另一台机器,也无法访问其他操作系统。 n_jobs > 1 基本上我尝试过的所有其他事情都是有问题的(除了网格搜索)

标签: python machine-learning scikit-learn


【解决方案1】:

我怀疑这可能与您仅使用包含 100 个样本的小数据集对其进行测试有关 - 也许它不足以证明并行化的开销是合理的。

应该是对于更大的数据集,并行模式将优于 n_jobs = 1 方法。您是否尝试过针对更大的样本进行测试?

【讨论】:

  • 您认为需要多大的数据集才能看到好处?
  • 这将取决于您的数据 - 如果每个条目有 1000 个特征,那么总数将少于如果您有 10 个特征。如果您访问的条目比您看到的要多得多,是否通过反复试验解决了问题。
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 2023-03-12
  • 1970-01-01
  • 2019-12-26
相关资源
最近更新 更多