【问题标题】:Sklearn: enable all cores using GridSearchCVSklearn:使用 GridSearchCV 启用所有内核
【发布时间】:2017-12-06 02:48:29
【问题描述】:

我正在使用GridSearchCV 寻找RandomForestClassifier 的最佳参数

这是部分代码:

clf = RandomForestClassifier(n_jobs=-1)

param_grid = {"max_depth": [3, None],
            "max_features": [1, 3, 10],
            "min_samples_split": [2, 3, 10],
            "min_samples_leaf": [1, 3, 10],
            "bootstrap": [True, False],
            "criterion": ["gini", "entropy"]}

# run grid search
grid_search = GridSearchCV(clf, param_grid=param_grid, n_jobs=-1)
start = time.time()
grid_search.fit(X_train, y_train)
print("GridSearchCV took %.2f seconds for %d candidate parameter settings."
      % (time.time() - start, len(grid_search.cv_results_['params'])))

我在 32 核服务器上运行此代码,但使用 htop 我看到只有大约 8 个内核在使用,所以我的问题是如何启用所有内核?

【问题讨论】:

  • n_jobs 显式设置为32?
  • @cᴏʟᴅsᴘᴇᴇᴅ 效果与n_jobs=-1相同

标签: python machine-learning scikit-learn random-forest


【解决方案1】:

忽略GridSearchCV,它还应该添加一个外层并行化,clf = RandomForestClassifier(n_jobs=-1)内部并行化只在树级上工作。。 p>

含义:它只使用与内部决策树一样多的核心! 默认(您正在使用的)是 10

我很确定:

clf = RandomForestClassifier(n_jobs=-1, n_estimators=32)

将使用所有 32 个内核,即使没有外部 GridSearchCV。

现在您必须做出决定,这是否是您的用例中的有效步骤(尽管增加 n_estimators 的行为相当稳健)。

【讨论】:

  • 但是如何让外层并行化在 32 核上工作?
  • @mrgloom 外层显然也受到您的 CV 配置的限制,通常这个限制甚至可能更具限制性(与增加内部树相比;难以扩展到 32 个核心)。如果内部算法使用 32 个核心,则不需要外部并行化。但我不知道为什么在你的基本情况下没有加速因子 2 或 3,通过外部并行化,sry。
  • 我理解你的意思,使用内部循环很容易使用所有内核,n_estimators' >= n_cores, but ideally n_estimators' 也应该使用网格搜索进行交叉验证。在我看来,GridSearchCV 没有按预期工作,因为任务数是 2*3*3*3*2*2= 216,超过 32。
猜你喜欢
  • 2016-02-10
  • 2016-07-27
  • 2021-11-12
  • 1970-01-01
  • 2021-01-16
  • 2014-05-12
  • 2019-06-26
  • 2017-02-19
  • 1970-01-01
相关资源
最近更新 更多