在 GridSearchCV 和 RandomizedSearchCV 中获取单个模型和自定义分数 [重复]

Posted

技术标签:

【中文标题】在 GridSearchCV 和 RandomizedSearchCV 中获取单个模型和自定义分数 [重复]【英文标题】:Get individual models and customized score in GridSearchCV and RandomizedSearchCV [duplicate] 【发布时间】:2020-11-01 23:03:12 【问题描述】:

GridSearchCVRandomizedSearchCV 具有 best_estimator_

仅返回最佳估计器/模型 通过一种简单的评分方法找到最佳估计器:准确度、召回率、精确度等。 仅基于训练集进行评估

我想用

来丰富这些限制 我自己对评分方法的定义 在测试集上进一步评估,而不是像 GridSearchCV 那样进行训练。最终,重要的是测试集的性能。训练集往往在我的网格搜索上提供几乎完美的准确性。

我正在考虑通过以下方式实现它:

在 GridSearchCV 和 RandomizedSearchCV 中获取单独的估计器/模型 对于每个估算器/模型,在测试集上进行预测并使用我的自定义分数进行评估

我的问题是:

有没有办法从GridSearchCV 获取所有单独的模型? 如果不是,您有什么想法来实现与我想要的相同的目标?最初我想利用现有的GridSearchCV,因为它会自动处理多参数网格、CV 和多线程。欢迎任何其他实现类似结果的建议。

【问题讨论】:

链接线程(免责声明:有自己的答案)可以说涵盖了您的第一个问题,这使得第二个问题(“if not”)过时了。 太棒了,谢谢@desertnaut 【参考方案1】:

您可以使用 XYZSearchCVs 中已有的自定义评分方法:请参阅 scoring 参数和文档中指向用户指南的链接,了解如何编写自定义评分器。

您可以使用固定的训练/验证拆分来评估超参数(请参阅cv 参数),但这将不如 k 折交叉验证稳健。应保留测试集以仅对最终模型进行评分;如果您使用它来选择超参数,那么您收到的分数将不会是对未来性能的无偏估计。

没有简单的方法来检索GridSearchCV 构建的所有模型。 (通常会有很多个模型,保存它们通常会浪费内存。)

GridSearchCV 的并行化和参数网格部分出奇的简单;如果需要,您可以将源代码的相关部分复制出来以生成自己的方法。


训练集往往会在我的网格搜索上提供几乎完美的准确性。

这有点令人惊讶,因为搜索中的 CV 部分意味着模型正在根据看不见的数据进行评分。如果你在测试集上得到很高的best_score_ 但性能很低,那么我怀疑你的训练集实际上不是一个有代表性的样本,这需要对情况有更细致的了解。

【讨论】:

以上是关于在 GridSearchCV 和 RandomizedSearchCV 中获取单个模型和自定义分数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 GridSearchCV 和 RandomizedSearchCV 中获取单个模型和自定义分数 [重复]

包括 Scaling 和 PCA 作为 GridSearchCV 的参数

在 gridsearchcv sklearn 中进行训练和验证集

在 GridSearchCV 中对测试集进行预处理的问题

在 GridSearchCV 中显式指定测试/训练集

cross_val_score 和 gridsearchCV 是如何工作的?