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

机器算法验证 交叉验证 偏见
2022-03-23 02:52:51

据我了解,测试误差的 k 折交叉验证估计通常会低估实际测试误差。我很困惑为什么会这样。我明白了为什么训练误差通常低于测试误差——因为你正在用你估计误差的相同数据训练模型!但交叉验证的情况并非如此——在训练过程中,您测量错误的折叠被特别忽略了。

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

3个回答

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

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

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

不,如果处理得当,折交叉验证往往会高估泛化误差,即它具有(通常是轻微的)悲观偏差。也就是说,它给出了所讨论的代理模型的泛化误差的无偏估计。但是随着模型的误差随着训练样本大小(也就是学习曲线)的增加而减小,平均而言,代理模型的真实泛化误差(略)高于在整个数据集上训练的模型 - 这是误差近似的模型通过交叉验证。k

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

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

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

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

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

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

结论是,使用 CV 或 bootstrap,“......对于特定训练集的测试误差的估计一般来说并不容易,只给定来自同一训练集的数据”。“不容易”是指根据不同的训练数据集,CV 误差可能会低估或高估真实的测试误差,即由不同的训练数据集引起的方差非常大。偏见呢?他们测试的 kNN 和线性模型几乎没有偏差:CV 误差高估了真实的测试误差 0-4%,但一些模型“比如树、交叉验证和引导程序可以低估真实的误差 10%,因为搜索最佳树受到验证集的强烈影响”。

总而言之,对于特定的训练数据集,CV 误差可能高于或低于真实测试误差。对于偏差,预期 CV 误差的范围可能比预期的真实测试误差略高到远低于预期的真实测试误差,具体取决于建模方法。

如上所述,低估的原因是最佳模型的超参数选择最终取决于我们获得的特定训练数据集。验证数据集中的信息可能会以某种方式流入模型拟合过程。另一方面,正如 cbeleites 所讨论的,CV 误差也可能有点高估真实的测试误差。这是因为 k 倍 CV 误差是通过使用少一点的训练数据来训练模型得到的(对于 10 倍 cv,使用 90% 的数据),它对真实误差有向上的偏差,但并不大。所以有两种不同方向的偏见。对于建模方法倾向于过拟合,使用较少的折叠CV,例如5-fold vs 10-fold,可能会导致较小的偏差。

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