为什么K-fold交叉验证会建立K+1模型?

Why K-fold cross validation will built K+1 models?

我已经阅读了 K 折交叉验证的一般步骤 https://machinelearningmastery.com/k-fold-cross-validation/

描述的大致流程如下:

  1. 随机打乱数据集。
  2. 将数据集分成 k 组(折叠)
  3. 对于每个独特的 group:Take 组作为坚持或测试数据集
  4. 将剩下的组作为训练数据集在训练集上拟合一个模型,在测试集上进行评估
  5. 保留评估分数并丢弃模型
  6. 利用模型样本总结模型的技巧 评价分数

那么如果是K-fold那么就建K个模型吧?但是为什么我从 H2O 的下面 link 中读到它说它构建了 K+1 个模型?

https://github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/tutorials/gbm/gbmTuning.ipynb

可以说,"I read somewhere else" 是一个过于模糊的陈述(在哪里?),因为 context 确实很重要。

这种说法很可能是指一些库,默认情况下,在完成 CV 适当程序后,继续使用 CV 找到的超参数在整个训练数据上构建模型以提供最佳性能;例如,参见相关 train function of the caret R package, which, apart from performing CV(如果需要)、returns 以及 finalModel:

finalModel

A fit object using the best parameters

同样,scikit-learn GridSearchCV也有一个相关的参数refit:

refit : boolean, or string, default=True

Refit an estimator using the best found parameters on the whole dataset.

[...]

The refitted estimator is made available at the best_estimator_ attribute and permits using predict directly on this GridSearchCV instance.

但即便如此,拟合的模型几乎永远不会只是 K+1:当您在实践中使用 CV 进行超参数调整时(请记住,CV 也有其他用途),您将结束向上拟合 m*K 模型,其中 m 是超参数组合集的长度(单轮中的所有 K 折叠都是 运行,具有一组超参数)。

换句话说,如果您的超参数搜索网格由 3 个值组成,例如 3 个值。树的数量和树深度的 2 个值,您将在 CV 过程中拟合 2*3*K = 6*K 个模型,并且可能在最后将您的模型拟合到具有找到的最佳超参数的整个数据时 +1。

所以,总结一下:

  • 根据定义,每个 K 折 CV 程序只包含 K 个模型的拟合,每个折一个模型,所有折都有固定的超参数

  • 对于超参数搜索的 CV,将对搜索网格的每个超参数组合重复此过程,导致 m*K 拟合

  • 找到最佳超参数后,您可能想使用它们来拟合最终模型,即再拟合 1 个

导致总共 m*K + 1 个模型适合。

希望这对您有所帮助...