use*_*237 4 python machine-learning random-forest scikit-learn grid-search
使用 sklearn 在随机森林分类器上运行网格搜索。这运行的时间比我想象的要长,我试图估计这个过程还剩下多少时间。我认为它会做的拟合总数是 3*3*3*3*5 = 405。
clf = RandomForestClassifier(n_jobs=-1, oob_score=True, verbose=1)
param_grid = {'n_estimators':[50,200,500],
'max_depth':[2,3,5],
'min_samples_leaf':[1,2,5],
'max_features': ['auto','log2','sqrt']
}
gscv = GridSearchCV(estimator=clf,param_grid=param_grid,cv=5)
gscv.fit(X.values,y.values.reshape(-1,))
Run Code Online (Sandbox Code Playgroud)
从输出中,我看到它循环执行任务,其中每组都是估计器的数量:
[Parallel(n_jobs=-1)]: Done 34 tasks | elapsed: 1.2min
[Parallel(n_jobs=-1)]: Done 184 tasks | elapsed: 5.3min
[Parallel(n_jobs=-1)]: Done 200 out of 200 tasks | elapsed: 6.2min finished
[Parallel(n_jobs=8)]: Done 34 tasks | elapsed: 0.5s
[Parallel(n_jobs=8)]: Done 184 tasks | elapsed: 3.0s
[Parallel(n_jobs=8)]: Done 200 tasks out of 200 tasks | elapsed: 3.2s finished
[Parallel(n_jobs=-1)]: Done 34 tasks | elapsed: 1.1min
[Parallel(n_jobs=-1)]: Done 50 tasks out of 50 tasks | elapsed: 1.5min finished
[Parallel(n_jobs=8)]: Done 34 tasks | elapsed: 0.5s
[Parallel(n_jobs=8)]: Done 50 out of 50 tasks | elapsed: 0.8s finished
Run Code Online (Sandbox Code Playgroud)
我数了一下“完成”的数量,目前是680。我以为405就可以了。我的计算有错吗?
您的计算似乎正确:网格数是不同参数的组合乘积,在本例中为 81:
>>> from sklearn.model_selection import ParameterGrid
>>> pg = ParameterGrid(param_grid)
>>> len(pg)
81
Run Code Online (Sandbox Code Playgroud)
在每个中,您有五个交叉验证,总共 405 个。这tasks是一个完全独立的指示。
verbose被穿过一个父类BaseForest,并随后JOBLIB的Parallel。
我不确定在这种情况下什么构成了任务,但顶级网格列车组合的数量应该是 405。请记住,这些组合中的每一个都是树的集合。