我自己的在完整数据上训练的模型比我从 GridSearchCV 得到的最好的估计器更好,refit=True?

数据挖掘 xgboost 数据科学模型 超参数调整 网格搜索
2022-03-03 11:54:35

我正在使用 XGBoost 模型对一些数据进行分类。我有 cv splits (train, val) 和一个单独的测试集,直到最后我才使用。

我已经使用 GridSearchCV 来确定最佳参数并将我的 cv 拆分(5 折)输入其中,并设置 refit=True 以便一旦它找出最佳超参数,它就会在完整数据上训练(所有折而不是只有 4 /5 折叠)并返回 best_estimator。然后我最后在我的测试集上测试这个最好的模型。

然后,我将此模型的结果与我自己单独训练的具有最佳超参数的模型进行比较,我自己的模型得到了更好的结果。这是为什么?

GridSearchCV 在使用最佳超参数对完整数据进行训练时是否仍使用交叉验证?GridSearchCV 是否正在做一些损害模型的额外事情?

1个回答

然后,我将此模型的结果与我自己单独训练的具有最佳超参数的模型进行比较,我自己的模型得到了更好的结果。这是为什么?

我想说最可能的解释是与网格搜索选择的模型过度拟合:当尝试不同的参数组合时,有可能在 CV 拆分时碰巧非常好。CV 应该抵消这种偶然性的影响,但它不能完全避免它,特别是如果有许多不同的参数组合和/或数据集很小。因此,即使总体上并没有真正更好,也会选择这个模型,并且它在测试集上获得了次优的性能。

GridSearchCV 在使用最佳超参数对完整数据进行训练时是否仍使用交叉验证?

我不知道实现,但这没有任何意义,所以没有。

GridSearchCV 是否正在做一些损害模型的额外事情?

我不这么认为,但调整参数的过程是一种训练,因此它也会导致过度拟合。