你能从 sklearn 网格搜索 (GridSearchCV) 中获得所有估计器吗?

Posted

技术标签:

【中文标题】你能从 sklearn 网格搜索 (GridSearchCV) 中获得所有估计器吗?【英文标题】:Can you get all estimators from an sklearn grid search (GridSearchCV)? 【发布时间】:2021-03-29 05:43:59 【问题描述】:

我最近使用sklearn.model_selection.GridSearchCV 测试了许多超参数组合。我想知道是否有办法调用在此过程中训练的所有以前的估算器。

search = GridSearchCV(estimator=my_estimator, param_grid=parameters)
# `my_estimator` is a gradient boosting classifier object
# `parameters` is a dictionary containing all the hyperparameters I want to try

我知道我可以用search.best_estimator_ 调用最好的估计器,但我也想调用所有其他估计器,以便测试他们的个人表现。

搜索需要大约 35 小时才能完成,所以我真的希望我不必重新做一遍。

注意:这是几年前提出的问题 (here),但此后sklearn 已多次更新,现在答案可能有所不同(我希望如此)。

【问题讨论】:

【参考方案1】:

不,除了(可选,但默认情况下)在整个训练集上训练的最后一个模型,您的best_estimator_ 之外,没有保存任何测试模型。尤其是当模型存储大量数据(例如 KNN)时,保存所有拟合的估计器将非常消耗内存,并且通常没有多大用处。 (cross_validate 确实有一个参数 return_estimator,但超参数调谐器没有。如果你有一个令人信服的理由来添加它,它可能不需要太多工作,你可以在 sklearn 上打开一个 GitHub 问题。)

但是,您确实拥有记录所有测试估计器分数的cv_results_ 属性。这通常足以用于检查目的。

【讨论】:

以上是关于你能从 sklearn 网格搜索 (GridSearchCV) 中获得所有估计器吗?的主要内容,如果未能解决你的问题,请参考以下文章

加速 sklearn 中的网格搜索

在 sklearn 中制作网格搜索功能以忽略空模型

sklearn 网格搜索与分组 K 折 cv 生成器

sklearn,python中的网格搜索技术

管道和网格搜索的 SKLearn 错误

在 sklearn 中使用网格搜索和管道获得正确的交叉验证分数