在scikit-learn中进行网格搜索后,是否有简单或现成的方法可以自动返回前k个表现最佳的模型,或者自动平均它们的输出?我打算通过这种方式尝试减少过拟合。我尚未找到与此相关的任何内容。
编辑:为了澄清,我知道sklearn的GridSearch,我正在寻找一个选项,可以进行网格搜索,然后返回前k个表现最佳的模型或对它们进行平均,而不是仅仅返回最佳单一模型。
回答:
如果你有一个已经拟合的GridSearchCV
对象,命名为grid
,你可以通过grid.cv_results_
获取每个参数的结果。我通常将其加载为pandas DataFrame。
import pandas as pdresults = pd.DataFrame(grid.cv_results_)results.sort_values(by='rank_test_score', inplace=True)
然后你可以从params
列获取每个模型的参数。例如,如果你想设置第二好的参数:
params_2nd_best = results.iloc[1]['params']clf_2nd_best = grid.best_estimator_.set_params(**params_2nd_best)