Sklearn:使用GridSearchCV启用所有核心

时间:2017-07-02 21:20:56

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

我使用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个核心正在使用,所以我的问题是如何启用所有核心?

1 个答案:

答案 0 :(得分:2)

忽略GridSearchCV,其中还应添加外层并行化,clf = RandomForestClassifier(n_jobs=-1) 内部并行化仅适用于树级

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

我很确定,那:

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

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

现在你必须做出决定,如果这是你的用例中的一个有效步骤(尽管增加n_estimators表现得非常强大)。