留一法交叉验证 (LOOCV) 是否会系统地高估错误?

机器算法验证 机器学习 交叉验证 验证 分层
2022-02-15 14:22:49

假设我们要建立一个回归模型,该模型需要预测构建中的温度。我们从一个非常简单的模型开始,我们假设温度仅取决于工作日。

现在我们想使用 k-fold 验证来检查我们的假设是否有效。现在,对于每个工作日,我们使用整个数据集计算平均温度。但是,当我们进行留一验证时,我们会进行一次观察并在没有这个特定观察的情况下计算平均值。结果,每当观察值上升时,相应的预测(用剩余值计算的平均值)就会下降。因此,我们在观察和预测之间存在反相关,它应该会明显降低模型的准确性。

所以,我的问题是:这是一个已知的影响以及如何处理它?

4个回答

鉴于训练样本的大小()小于整个样本的大小( 参数估计基于 CV 中的训练子样本(无论是 LOO 还是 K-fold ) 预计将不如基于整个样本的准确度/精确度。这将导致对整个样本估计的模型的预测损失被高估。对于 LOOCV,差异通常很小,因为相差很小(相差);对于 K 折 CV,它会更大。ntrainingn

ntraining<n,
ntrainingn1

这种效应不仅发生在留一法中,而且通常发生在 k 折交叉验证 (CV) 中。你的训练和你的验证集不是独立的,因为分配给你的验证集的任何观察显然会影响你的训练集(因为它被从中取出)。

这种情况的扩展程度取决于您的数据和预测器。举一个非常简单的例子,使用关于每日温度的任务使用留一法:如果您的数据仅包含一个(相同的)值次,那么您的平均预测器将始终预测所有倍的正确值。如果您使用从训练集中获取最大值的预测器(用于预测和计算真实值),那么您的模型在折中将是正确的(只有从训练数据集中删除最大值的折将是预测错误)。即,存在留一法可能或多或少适合的预测变量和数据集。nnn1

具体来说,您的均值估计器有两个属性:

  1. 它取决于训练集中的所有示例(即在现实世界的非平凡数据集中(与我上面的示例不同),它将在每个折叠中预测不同的值)。例如,最大预测器不会显示此行为。
  2. 它对异常值很敏感(即删除其中一个折叠中的极高或极低值将对您的预测产生相对较大的影响)。例如,中值预测器不会在相同程度上显示这种行为。

这意味着您的平均预测器在每个设计中都有些不稳定。您可以接受(特别是在观察到的方差不是很大的情况下)或选择不同的预测变量。但是,如前所述,这也取决于您的数据集。如果您的数据集很小且方差很大,则均值预测器的不稳定性会增加。因此,拥有一个足够大的数据集并进行适当的预处理(可能去除异常值)可能是解决此问题的另一种方法。另外,我要记住,没有完美的方法来衡量准确性。

论文A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection是这个主题的一个很好的起点。它侧重于分类,但仍然是一本很好的读物,可以获取有关该主题的更多详细信息和进一步阅读。

您不是在观察值和平均值之间添加负相关,而是在观察值和平均值之间消除正相关。不进行交叉验证的整个问题是,如果您有 n 个数据点,那么每次您对其中一个数据点进行预测时,预测的 1/n 来自自身,因此您过度估计了准确性量与 1/n 成比例。如果你指出这一点,你就摆脱了高估,因此较低的准确度并不是高估了误差,而是得到了更有效的误差估计。

考虑掷骰子十次,而你正试图预测掷骰xi. x¯是所有十次滚动的平均值,并且x¯是九卷的平均值,不包括xi. 显然,两者之间存在相关性xix¯. 尝试模拟 100 次掷十个骰子的试验,并将第一次掷骰与每次试验的总体平均值进行比较。而期望值x¯是 35,会有一些变化,平均值高于 35 的试验很可能是第一轮高于 3 的试验。

之间没有相关性其他两个卷独立于虽然之间的变化之间存在负相关,但这只是反映了具有您正在摆脱的相关性的事实。xix¯xixix¯x¯x¯

这两个问题的答案都是肯定的:

  • 是的,LOO 确实有悲观的偏见,而且
  • 是的,所描述的额外悲观偏见的影响是众所周知的。

Richard Hardy 的回答很好地解释了正确执行的重采样验证(包括所有类型的交叉验证)的众所周知的轻微悲观偏见。

但是,问题正文中讨论的机制,即删除在某种意义上极端的情况将给出测试/训练子集拆分,其中训练子集特别不代表要测试的子集。正如Sammy 已经解释的那样,这可能会导致额外的错误因此,这种高错误的原因是,对于训练空间之外(或边缘)的情况,预测性能恶化得非常快。


该怎么做才能对抗这种影响?

对于这种情况有不同的观点,这将取决于您对手头任务的判断,哪个适用以及如何处理。

  • 一方面,这可能被视为对类似极端的应用案例(有点超出训练空间)的预期错误的指示——并且在重采样期间遇到此类情况可以被视为表明构建模型的类似极端案例在生产使用过程中会遇到整个数据集。
    从这个角度来看,附加误差不是偏差,而是一种评估,包括在训练空间之外的轻微外推,被判断为代表生产使用。
  • 另一方面,在额外的约束/要求/假设下建立模型是完全有效的,即不应在训练空间之外进行预测。理想情况下,这样的模型应该拒绝对其训练域之外的案例的预测,这种模型的预测测试用例的 LOO 错误不会更糟,但会遇到很多拒绝。

现在,有人可以争辩说,由于所描述的对训练和测试子集群体的相反影响,遗漏的机制产生了不具代表性的高比例的外部训练空间案例。这可以通过研究各种的偏差和方差特性来分别用于留出和k验证。这样做,在某些情况下(数据集 + 模型组合),遗漏一个会表现出更大的悲观偏差,这是预期的遗漏多于一个。(参见 Sammy 链接的 Kohavi 论文;还有其他论文报告了这种行为)knnk
我可能会补充说,由于留一法具有其他不良特性(将模型稳定性与训练用例的随机误差与测试用例的随机误差混为一谈),我无论如何都建议不要在可行的情况下使用 LOO。

重采样验证的分层变体通过设计产生更紧密匹配的训练和测试亚群,它们可用于分类和回归
采用这种分层是否合适基本上是对手头任务的判断问题。
但是,留一法与其他重采样验证方案的不同之处在于它不允许分层。因此,如果应该使用分层,那么遗漏一个不是一个合适的验证方案。


这种特殊的悲观偏见何时出现?

  • 这是一个小样本量问题:在所描述的模型中,只要每个工作日的“箱”中有足够的案例,即使漏掉一个极端案例也会导致训练均值的波动,即 << 温度分布对于那个工作日,对观察到的误差的影响可以忽略不计。
  • 高维输入/特征/训练空间有更多“可能性”使情况在某些方向上变得极端:在高维空间中,大多数点往往位于“外部”。这与维度灾难有关。
  • 它还与模型复杂性有关,边缘情况的高误差表明模型在训练区域之外立即不稳定。