为什么进行K折交叉验证会建立K + 1模型?

时间:2018-10-03 21:55:31

标签: machine-learning cross-validation

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

它描述的一般过程如下:

  1. 随机随机播放数据集。
  2. 将数据集分成k组(折叠)
  3. 对于每个唯一组:将该组作为保留或测试数据集
  4. 将其余组作为训练数据集在训练集中拟合模型并在测试集上进行评估
  5. 保留评估分数并丢弃模型
  6. 使用模型样本总结模型的技能 评估分数

因此,如果是K折,那么将建立K个模型,对吗?但是,为什么我从H2O的以下链接中读到它说它构建了K + 1模型?

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

1 个答案:

答案 0 :(得分:2)

可以说,“我在其他地方读过”的陈述太模糊了(在哪里?),因为上下文确实很重要。

这样的语句很可能引用某些库,默认情况下,在完成CV适当的过程后,将使用CV发现的超参数在整个训练数据上继续建立模型,以提供最佳性能;例如,请参见caret R程序包中的相关train function,除了performing CV(如果需要)之外,它还返回finalModel

  

finalModel

     

使用最佳参数的适合对象

类似地,scikit-learn GridSearchCV也有一个相关的参数refit

  

refit:布尔值或字符串,默认为True

     

使用在整个数据集中找到的最佳参数来估算一个值。

     

[...]

     

best_estimator_属性上提供了经过调整的估算器,并允许在此predict实例上直接使用GridSearchCV

但是即使那样,拟合的模型也几乎永远不会只是K + 1:当您在实践中使用CV进行超参数调整时(请记住,对于CV也有其他用途),您最终会拟合m*K个模型,其中m是您的超参数组合集的长度(单个回合中的所有K折均使用一组超参数运行)。

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

所以,总结一下:

  • 按定义,每个K折CV程序仅包含K个模型,每个模型一个,在所有折中具有固定的超参数

  • 在使用CV进行超参数搜索的情况下,将对搜索网格的每个超参数组合重复此过程,从而导致m*K拟合

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

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

希望这对您有帮助...