GridSearchCV:基于 mean_test_score 结果,predict 应该表现得更差,但事实并非如此

Posted

技术标签:

【中文标题】GridSearchCV:基于 mean_test_score 结果,predict 应该表现得更差,但事实并非如此【英文标题】:GridSearchCV: based on mean_test_score results, predict should perform much worse, but it does not 【发布时间】:2019-01-04 15:10:55 【问题描述】:

我正在尝试通过 GridSearchCV 评估回归器的性能。在我的实现中,cv 是一个 int,所以我应用了 K-fold 验证方法。看着cv_results_['mean_test_score'], k-fold unseen data 的最佳平均分数约为 0.7,而 train 分数要高得多,例如 0.999。这很正常,我可以接受。

好吧,按照这个概念背后的推理,当我将best_estimator_ 应用于整个数据集时,我希望看到至少部分数据预测得不完美,对吧?相反,对于所有数据点,预测量和实际值之间的数值偏差几乎为零。这有过拟合的味道。

我不明白,因为如果我删除一小部分数据并将 GridSearchCV 应用于其余部分,我会发现与上述几乎相同的结果,但应用于完全看不见的数据的最佳回归器预测值要高得多错误,例如 10%、30% 或 50%。这是我所期望的,至少在某些方面,根据 k-fold 测试集的结果将 GridSearchCV 拟合到整个集合上。

现在,我知道这会强制预测器查看所有数据点,但最好的估计器是 k 次拟合的结果,它们中的每一个都没有看到 1/k 部分的数据。作为 mean_test_score 这些 k 分数之间的平均值,我希望看到一堆预测(取决于 cv 值),这些预测显示错误分布在平均错误周围,证明 0.7 分数是合理的。

【问题讨论】:

【参考方案1】:

GridSearchCV 的refit=True 参数使具有找到的最佳超参数集的估计器重新适应完整数据。因此,如果您的训练误差在 CV 折叠中几乎为零,那么您预计它在 best_estimator_ 中也接近于零。

【讨论】:

谢谢,答案比我想象的要简单!对整个数据的重新拟合是所有数据点完美拟合的原因!要评估预测器的真实性能,我必须查看 cv_results_['mean_test_score'] @AlessioGiberti,这也是一个乐观的偏差分数,因为它被用来选择超参数。要获得真正公正的性能估计,您需要另一个测试集。

以上是关于GridSearchCV:基于 mean_test_score 结果,predict 应该表现得更差,但事实并非如此的主要内容,如果未能解决你的问题,请参考以下文章

XGBoost模型调参:GridSearchCV方法网格搜索优化参数

gridsearchcv怎么调参

使用 GridSearchCV 但不使用 GridSearchCV 时出错 - Python 3.6.7

Gridsearchcv:内部逻辑

如何从 gridsearchcv 绘制决策树?

我正在使用 GridSearchCV 训练一个 Ann 机器学习模型,但在 gridSearchCV 中遇到了 IndexError