嵌套交叉验证-与通过训练集上的kfold CV选择模型有何不同?


10

我经常看到人们谈论5x2交叉验证是嵌套交叉验证的特例。

我假设第一个数字(在这里:5)是指内环的折叠数,第二个数字(在这里:2)是指外环的折叠数?那么,这与“传统”模型选择和评估方法有何不同?我所说的“传统”

  • 将数据集拆分为单独的训练(例如80%)和测试集
  • 在训练集上使用k倍交叉验证(例如k = 10)进行超参数调整和模型选择
  • 使用测试集评估所选模型的泛化性能

如果k = 2,则测试集和训练集的大小相等,那么5x2是否不完全相同?


1
您是对的,在这种情况下,它是相同的,只是它在外部循环中使用50/50分割而不是80/20分割。通常,它可以更好地估计泛化性能,因此应优先考虑,尤其是在样本量相对较小的情况下。根据我的经验,即使对于嵌套的简历,性能估计也有很大差异。通常,最好多次执行嵌套CV,以获得对泛化性能的良好估计。
乔治

谢谢,很有道理!但是,对于小型训练集,我可能会增加内圈和外圈的折叠次数。可能会减少方差,但也会增加偏差

通常,我通常不执行5x2嵌套CV,而是执行(k-1)xk,其中k = 5或10。在样本较少的情况下,我会增加k的较小值而不是增加折叠数。
乔治

1
我认为您的想法是倒退而不是完全错误的,但是被接受的答案可能与我将要参考的来源不同。他在Raschka撰写的《 Python Machine Learning》中提到:“嵌套交叉验证的特殊类型也称为5x2交叉验证”。有一个包含的图形,其中他显示2表示用于超参数调整的内部循环,而5表示用于无偏模型性能估计的外部循环。您可以在方案3下找到图形的彩色副本:sebastianraschka.com/faq/docs/evaluate-a-model.html
奥斯丁,

Answers:


13

据我在文献中所见,5x2cv总是指2倍的5重复。根本没有嵌套。做2折(训练与测试之间50/50的比例),再重复4次。5x2cv在论文《近似统计测试》中得到了普及,用于比较 Dietterich 监督的分类学习算法,这不仅是获得良好的泛化误差估计值,而且是获得该误差方差的良好估计值的一种方法(以便进行统计检验) )


谢谢!您是否知道如果内部循环选择不同的模型,例如,如果在一个模型选择期间“最优”正则化参数为lambda = 100,而对于另一个模型,lambda = 1000,人们通常会做什么?在这种情况下,计算平均模型性能会有些奇怪,对吧!您会将模型视为“不稳定”吗?

3
内循环很可能导致对超参数的不同选择。您不使用嵌套的交叉验证来选择超参数,而只是为了很好地估计泛化误差(可能具有最佳的超参数)。嵌套的简历用于在一种或另一种算法之间进行决策。参见stats.stackexchange.com/questions/136296/…stats.stackexchange.com/questions/65128/…(以及其他内容)
雅克·

哦,我知道了,那完全有道理!我以为人们使用它的方式有所不同。我想我们可以解决这个问题。

2

外循环中有2次重复意味着您在整个火车上重复5倍CV的次数。每次细分成不同的折叠。

这主要用于更好地评估模型性能,例如对一个模型是否在统计上明显优于另一个模型进行统计测试。

如果您的数据集很大且没有异常值,则嵌套CV并不是至关重要的。如果您的数据确实存在异常值,则交叉验证的性能可能会大不相同,具体取决于这些异常值所在的折叠倍数。因此,您需要重复执行CV几次。


好点子。在传统方法中(测试/训练拆分,然后在训练集上进行k折CV),您只有1折用于评估模型,而在5x2 CV中,可以从2个不同的折中计算平均性能。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.