什么时候真正需要嵌套交叉验证并且可以产生实际的影响?

机器算法验证 交叉验证 模型选择 岭回归
2022-01-21 15:01:44

当使用交叉验证进行模型选择(例如超参数调整)和评估最佳模型的性能时,应该使用嵌套交叉验证外循环是评估模型的性能,内循环是选择最好的模型;在每个外部训练集上选择模型(使用内部 CV 循环),并在相应的外部测试集上测量其性能。

这已经在许多线程中进行了讨论和解释(例如,在交叉验证后使用完整数据集进行训练?,请参阅@DikranMarsupial 的答案),我完全清楚。仅对模型选择和性能估计进行简单(非嵌套)交叉验证可以产生正偏差的性能估计。@DikranMarsupial 有一篇 2010 年关于这个主题的论文(关于模型选择中的过度拟合和性能评估中的后续选择偏差),第 4.3 节被称为模型选择中的过度拟合真的是实践中的真正问题吗?——论文表明答案是肯定的。

话虽如此,我现在正在使用多元多元岭回归,我看不出简单 CV 和嵌套 CV 之间有任何区别,因此在这种特殊情况下,嵌套 CV 看起来像是不必要的计算负担。我的问题是:在什么情况下,简单的 CV 会产生明显的偏差,而嵌套 CV 可以避免这种偏差?嵌套 CV 什么时候在实践中很重要,什么时候没那么重要?有什么经验法则吗?

这是使用我的实际数据集的插图。对于岭回归,横轴是纵轴是交叉验证误差。蓝线对应于简单(非嵌套)交叉验证,有 50 个随机 90:10 训练/测试拆分。红线对应于具有 50 个随机 90:10 训练/测试拆分的嵌套交叉验证,其中是通过内部交叉验证循环(也是 50 个随机 90:10 拆分)选择的。线条表示超过 50 个随机分割,阴影显示标准偏差。log(λ)λ±1

简单与嵌套交叉验证

红线是平的,因为的整个范围内测量如果简单的交叉验证有偏差,那么蓝色曲线的最小值将低于红线。但这种情况并非如此。λλ

更新

实际上就是这样:-) 只是差异很小。这是放大:

简单与嵌套交叉验证,放大

这里可能会产生误导的一件事是我的误差线(阴影)很大,但是嵌套和简单的 CV 可以(并且曾经)使用相同的训练/测试拆分进行。因此,正如@Dikran 在评论中所暗示的那样,它们之间的比较是成对的。因此,让我们来看看嵌套 CV 误差和简单 CV 误差之间的差异(对于对应于我的蓝色曲线上的最小值同样,在每一折中,这两个错误都是在同一个测试集上计算的。训练/测试拆分中绘制这种差异,我得到以下信息:λ=0.00250

简单与嵌套交叉验证,差异

零对应于内部 CV 循环也产生的分裂(它几乎发生了一半的时间)。平均而言,差异往往是正的,即嵌套 CV 的误差略高。换句话说,简单的 CV 表现出一种微不足道但乐观的偏见。λ=0.002

(我运行了整个过程几次,每次都会发生。)

我的问题是,在什么情况下我们可以期望这种偏见是微不足道的,在什么情况下我们不应该?

1个回答

我建议偏差取决于模型选择标准的方差,方差越高,偏差可能越大。模型选择标准的方差有两个主要来源,一个是评估它的数据集的大小(所以如果你有一个小数据集,偏差可能就越大)和统计模型的稳定性(如果通过可用的训练数据很好地估计了模型参数,模型通过调整超参数来过度拟合模型选择标准的灵活性较小)。另一个相关因素是要做出的模型选择和/或要调整的超参数的数量。

在我的研究中,我正在研究强大的非线性模型和相对较小的数据集(通常用于机器学习研究),这两个因素都意味着嵌套交叉验证是绝对必要的。如果您增加参数的数量(可能具有每个属性的缩放参数的内核),过度拟合可能是“灾难性的”。如果您使用的线性模型只有一个正则化参数并且案例数量相对较多(相对于参数数量而言),那么差异可能会小得多。

我应该补充一点,我建议始终使用嵌套交叉验证,只要它在计算上是可行的,因为它消除了可能的偏见来源,因此我们(和同行评审员;o)不需要担心它是否是可以忽略不计。