交叉验证分数/模型选择的差异

数据挖掘 xgboost 交叉验证 模型选择 参数估计
2022-03-05 13:35:55

在 xgboost 分类模型的交叉验证运行之间,我收集了不同的验证分数这是正常的,训练/验证拆分和模型状态每次都不同。

flds = self.gsk.Splits(X, cv_folds=cv_folds)
cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=xgb_param['n_estimators'], nfold=cv_folds, flds, metrics='auc', early_stopping_rounds=50, verbose_eval=True)

self.model.set_params(n_estimators=cvresult.shape[0])

为了进行参数选择,我多次运行此 CV并对结果进行平均以减弱这些差异。

一旦我的模型参数被“找到”,训练模型的正确方法是什么,它似乎有一些内部随机状态

我是否:

  • 在完整的火车上训练并希望最好?
  • 在我的 CV 循环中保持模型具有最佳验证分数(我担心这会过拟合)?
  • 把它们都包起来?
  • 只包好的?
1个回答

由于您希望您的模型成为通用解决方案,因此您希望在构建最终模型时包含所有数据。你说得对,让模型在 CV 中保持最佳验证分数是过拟合的。包括这些内部随机状态有助于泛化您的模型,并且由于您已经使用 CV 调整了模型参数,您可以将这些参数应用于最终模型。

至于特征选择,您希望将用于执行特征选择的数据和用于交叉验证的数据分开,因此在交叉验证折叠中对独立数据进行特征选择。这可以防止模型出现偏差。如果您要在用于交叉验证的相同数据上选择特征,您可能会高估您的准确性。

以下是其他一些有用的好帖子: https ://stats.stackexchange.com/questions/11602/training-with-the-full-dataset-after-cross-validation

https://stats.stackexchange.com/questions/27750/feature-selection-and-cross-validation

看看 Dikran Marsupial 对这两个问题的回答,它们真的很棒。