如果我知道使用设定值进行给定验证的时间,我可以估计 GridSearchCV 将花费我想要交叉验证的 n 个值的时间吗?
如何估计 GridSearchCV 计算时间?
数据挖掘
交叉验证
网格搜索
2021-09-25 10:40:50
2个回答
您可以一次将您的模型/管道(使用默认参数)拟合到您的数据中,然后查看训练需要多长时间。然后你可以乘以你想通过网格搜索训练模型的次数。
例如,假设您想使用网格搜索来选择管道的超参数a、b和c。
params = {'a': [1, 2, 3, 4, 5],
'b': [1, 2, 3, 4],
'c': [1, 2, 3]}
cv = GridSearchCV(pipeline, params)
默认情况下,这应该运行搜索网格不同的参数组合。默认的交叉验证是 3 倍 cv,所以上面的代码应该训练你的模型次。默认情况下,GridSearch 在您的处理器上并行运行,因此根据您的硬件,您应该将迭代次数除以可用处理单元的数量。假设我有 4 个处理器可用,每个处理器都应该适合模型次。现在,如果我的模型平均需要训练,我估计训练时间。在实践中应该更接近由于开销。
最后,由于某些参数严重影响该算法的训练时间,我建议max_iter
尽可能使用该参数,以便您的估计不会偏离太远。
请注意:截至 2021 年 7 月,默认折叠数为 5。
来自 sklearn 文档:在 0.22 版中更改:如果 None 从 3 倍更改为 5 倍,则 cv 默认值。
让搜索完成,然后您可以使用cv_results_
属性来计算经过的时间,如下所示。
mean_fit_time= search_cv.cv_results_['mean_fit_time']
mean_score_time= search_cv.cv_results_['mean_score_time']
n_splits = search_cv.n_splits_ #number of splits of training data
n_iter = pd.DataFrame(search_cv.cv_results_).shape[0] #Iterations per split
print(np.mean(mean_fit_time + mean_score_time) * n_splits * n_iter)
其它你可能感兴趣的问题