2017-07-02 117 views
0

我使用GridSearchCV找到RandomForestClassifierSklearn:让使用GridSearchCV

这里最优参数的所有核心是部分代码:

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

+0

将'n_jobs'明确设置为32? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ与'n_jobs = -1'相同的效果 – mrgloom

回答

2

GridSearchCV忽略,这也应该添加并行化的外层,所述内并行的clf = RandomForestClassifier(n_jobs=-1)仅工作在树级

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

我敢肯定,即:

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

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

现在你将不得不作出一个决定,如果这是你的用例中的有效步骤(虽然增加n_estimators表现非常强大)。

+0

但是如何让外层的并行化在32个内核上工作? – mrgloom

+0

@mrgloom外层显然也受限于你的CV配置,一般来说这个限制甚至可能会受到更多的限制(与增加内部树相比;很难扩展到32个内核)。如果内部算法使用32个内核,则不需要外部并行化。但我不知道为什么在你的基本情况下没有加速因子2或3,通过外部并行化,sry。 – sascha

+0

我明白你的观点,使用'n_estimators'> = n_cores使用内部循环很容易,但理想情况下'n_estimators'也应该使用网格搜索进行交叉验证。在我看来'GridSearchCV'没有像预期的那样工作,只要任务的数量是2 * 3 * 3 * 3 * 2 * 2 = 216就是32以上。 – mrgloom

相关问题