我已经阅读了K-fold交叉验证的一般步骤 https://machinelearningmastery.com/k-fold-cross-validation/
它描述的一般过程如下:
因此,如果是K折,那么将建立K个模型,对吗?但是,为什么我从H2O的以下链接中读到它说它构建了K + 1模型?
https://github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/tutorials/gbm/gbmTuning.ipynb
答案 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
个模型拟合。
希望这对您有帮助...