为什么测试误差的CV估计会低估实际测试误差?


10

据我了解,测试错误的k倍交叉验证估计通常会低估实际测试错误。我很困惑为什么会这样。我明白了为什么训练误差通常低于测试误差的原因-因为您正在使用与估计误差相同的数据来训练模型!但这不是交叉验证的情况-在训练过程中,您特别忽略了测量误差的折线。

另外,说测试误差的交叉验证估计向下偏是否正确?


1
您在哪里看到这句话?你能给一些参考吗?
horaceT '16

1
(+1)我看到了相同的陈述,我相信它是正确的,但我也不理解逻辑
KevinKim

Answers:


9

举个例子:如果您最初有多个模型(每个模型都有一定的CV误差和误差方差),则仅报告模型的CV误差是有问题的,然后使用此误差为您的应用选择最合适的模型。这是有问题的,因为对于每种模型,您仍然有一定的机会感到幸运/不走运(并获得更好/更差的结果),并且通过选择一个模型,您可能还选择了一个幸运度更高的模型。因此,将此错误报告为最终错误估计值往往过于乐观。

如果您想更深入地研究细节:此答案链接到一些有关此问题的易于阅读的论文:交叉验证滥用(报告性能以获得最佳超参数值)

正如@cbeleites指出的那样:如果有人使用获得的k倍CV误差来进行分析,例如a)从多个模型中选择最佳模型,例如使用不同的超参数(这是训练过程的一部分),那么这是有问题的; b)然后报告测试错误相同的错误,而不是使用单独的保留测试集。如果您打算直接询问纯CV错误本身,而不用它来选择任何模型,则@cbeleites的答案很可能是您要寻找的。


再次,这里的问题是报告针对泛化误差的训练错误(训练方法为:在获得一个最终模型的过程中使用此估计),而不管此错误是通过交叉验证,保留还是其他方式计算得出其他误差估计方法。
cbeleites对SX不满意,2016年

1
@cbeleites再次,正确的点-我通常认为CV结果将以某种方式用于模型选择(出于某种原因,这是首先使用CV的原因)-因此请指出这一点。我已经相应更新了答案。
geekoverdose

9

ķ

适当地粗略地完成意味着在交叉验证中分为测试集和训练集实际上导致了真正独立于模型的测试用例。

但是,有许多陷阱危及这种独立性。取决于测试数据受到的破坏程度以及模型过度拟合的程度,这种缺乏独立性的情况意味着交叉验证错误实际上变成了训练错误。也就是说,总而言之,您可能会遭受严重的乐观偏见(低估了实际的泛化误差)。
恕我直言,重要的是要了解,大多数陷阱并不是交叉验证所独有的,而是可以更好地表征为错误地分解为训练和测试集:它们可以(并且确实)与其他验证方案(例如保留或独立)一样发生实际上并不像人们想象的那样独立的测试集。

以下是我看到的最常见的分割错误示例:

  • @geekoverdose的答案给出了一个示例,该示例公然使用内部 训练(!)错误估计作为测试错误。
    更一般而言,用于数据驱动的模型优化的任何类型的误差估计都是训练误差,因为仍在继续使用该误差估计进行训练。
  • 混淆时未考虑混杂变量。
    数据矩阵中的一行不一定构成独立的情况,例如
    • 将对同一病例/受试者/患者的重复测量视为“独立”
    • 通常会忽略/忽略数据中的强大聚类
    • 没有意识到数据生成过程中的持续漂移(未来的未知案例与未知案例),...


0

首先,让我明确我所理解的问题中使用的术语。我们通常从一个训练数据集开始,使用k倍交叉验证来测试不同的模型(或超参数集),然后选择CV误差最小的最佳模型。因此,``测试错误的交叉验证估计''意味着使用最低的CV错误作为测试错误,而不仅仅是随机模型的CV错误(cbeleites讨论了这种情况,但这不是我们通常要做的)。所讨论的“实际测试错误”是将最佳CV模型应用于无限测试数据集时所获得的错误,前提是我们能够做到这一点。CV误差取决于我们拥有的特定数据集,而实际测试误差取决于所选择的最佳CV模型,它也取决于训练数据集。因此,CV误差和测试误差之间的差异取决于不同的训练数据集。那么问题就变成了,如果我们用不同的训练数据集重复上述过程很多次并分别对这两个误差求平均值,为什么平均CV误差低于平均测试误差,即CV误差向下偏?但是在此之前,这是否总是会发生?

通常,不可能获得包含无限行的许多训练数据集和测试数据集。但是可以使用模拟生成的数据来实现。在Trevor Hastie等人的“统计学习的要素”一书的“第7章模型评估和选择”中。,它包括这样的模拟实验。

结论是,使用CV或自举程序,“ ...给定特定训练集的数据通常很难估计特定训练集的测试误差”。“不容易”,它们表示CV误差可能会根据不同的训练数据集而被低估或高估了真实的测试误差,即由不同的训练数据集引起的方差很大。偏见如何?他们测试的kNN和线性模型几乎没有偏差:CV错误将真实测试错误高估了0-4%,但是某些模型“例如树,交叉验证和引导程序可以将真实错误低估10%,因为搜索最佳树受到验证集的强烈影响”。

综上所述,对于特定的训练数据集,CV误差可能高于或低于真实测试误差。对于偏差,取决于建模方法,平均CV误差可能会比平均真实测试误差高一点,甚至要低得多。

如上所述,低估的原因是最佳模型的超参数选择最终取决于我们得到的特定训练数据集。一点点细节,在此特定训练数据集中,让最佳超参数为M1。但是,M1可能不是其他训练数据集上的最佳超参数,这意味着最小CV误差小于M1的CV误差。因此,我们从训练过程中获得的预期CV错误很可能小于M1的预期CV错误。唯一不偏离特定训练数据集的最小CV误差的时间是最佳模型始终是独立于训练数据集的最佳模型时。另一方面,正如cbeleite所讨论的那样,CV错误也可能高估了真实的测试错误。这是因为k倍CV误差是通过使用少一些的训练数据来训练模型而获得的(对于10倍cv,使用90%的数据),它会因真实误差而向上偏置,但误差不大。因此,有两个偏向不同的方向。对于建模方法,往往会出现过度拟合的情况,使用较少的CV折叠(例如5倍和10倍)可能会减少偏差。

总而言之,它在实践中并没有太大帮助:我们通常仅获得一个“特定”数据集。如果我们保留15%到30%的测试数据,然后通过CV选择最佳模型作为训练数据,则CV误差将不同于测试误差,因为两者均与预期的测试误差不同。如果CV误差远低于测试误差,我们可能会感到怀疑,但我们不知道哪一个更接近真实的测试误差。最佳实践可能只是同时显示两个指标。

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.