Machine learning GridSearchCV将为此运行多少个组合?

Machine learning GridSearchCV将为此运行多少个组合?,machine-learning,scikit-learn,random-forest,grid-search,Machine Learning,Scikit Learn,Random Forest,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_feat

使用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,))
从输出中,我看到它在任务中循环,其中每个集合是估计数的数量:

[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

我算了一下“完成”的数量,现在是680。我以为会在405号完成。我的计算错了吗?

您的计算似乎正确:网格数是不同参数的组合乘积,在本例中为81:

>>> from sklearn.model_selection import ParameterGrid

>>> pg = ParameterGrid(param_grid)
>>> len(pg)
81
其中,您有五个交叉验证,总共405个。
任务
完全是一个单独的指示

verbose
访问父类
BaseForest
,然后访问joblib


我不确定在这种情况下什么构成任务,但顶级网格列组合的数量应该是405。请记住,这些任务中的每一个都是树的集合。

对于任务,我看到的是“200个任务中的一个”、“50个任务中的一个”或“500个任务中的一个”。它似乎与树的数量成正比。我只是注意到n_作业在-1和8之间来回跳跃。。。不确定为什么会这样,但也许我应该期望810个“完成的”s?嗯,n_jobs=-1将映射到您的comp上的核心数,我猜是8?至于任务。。。同样,我们不能确切地确定任务是由什么组成的,但它似乎与网格大小完成的运行是分开的。以811“完成”结束。不管怎样,你的计算是正确的。@user4446237巧合的是,我遇到了同样的情况。尺寸为9的参数网格,CV=4。您可能会假设总共有9*4=36个对.fit()的调用,但有82个“1000个状态中的1000个”状态。(在一个有1000棵树的随机森林中)所以,我不确定为什么会有这种差异。