K-fold 交叉验证会导致过拟合吗?

机器算法验证 交叉验证 过拟合
2022-03-07 09:42:22

我正在学习折交叉验证。由于每个折叠都将用于训练模型(在次迭代中),这不会导致过度拟合吗?kk

2个回答

K-fold 交叉验证是检测过拟合的标准技术。它不能“导致”因果关系意义上的过度拟合。

但是,不能保证 k 折交叉验证消除过拟合。人们将它用作过度拟合的灵丹妙药,但事实并非如此。这可能还不够。

应用交叉验证的正确方法是作为一种检测过拟合的方法。如果你做 CV,并且如果测试和训练误差之间存在很大差异,那么你就知道你过拟合了,需要获得更多样化的数据,或者选择更简单的模型和更强的正则化。相反不成立:测试和训练错误之间没有大的差异并不意味着你没有过度拟合。

这不是灵丹妙药,而是我们拥有的检测过度拟合的最佳方法(如果使用得当)

交叉验证可能失败的一些示例:

  • 数据是有序的,而不是在拆分之前打乱
  • 不平衡的数据(尝试分层交叉验证)
  • 在不同的折叠中重复
  • 自然组(例如,来自同一用户的数据)被打乱成多个折叠

在其他情况下,即使使用得当,它也无法检测到信息泄漏和过度使用。例如,在分析时间序列时,人们喜欢将数据标准化,将其拆分为过去和未来的数据,然后训练一个模型来预测这些股票的未来发展。细微的信息泄漏在预处理中:时间分裂之前的标准化泄漏了关于剩余部分的平均值的信息。类似的泄漏可能发生在其他预处理中。在异常值检测中,如果您将数据缩放到 0:1,模型可以知道接近 0 和 1 的值是您可以观察到的最极端值等。

回到你的问题:

由于每个折叠都将用于训练模型(在迭代中),这不会导致过度拟合吗?

不会。每折都是用来从头开始训练一个新模型,预测准确率,然后丢弃模型您不使用在 CV 期间训练的任何模型。

您使用验证(例如 CV)有两个目的:

  1. 估计您的模型在部署时(希望)在实践中的工作情况,而不会冒险在生产中进行真正的 AB 测试。您只想使用预期效果比您当前方法更好的模型,否则这可能会使您的公司损失数百万美元。
  2. 找到用于训练最终模型的“最佳”参数(您想要在整个训练数据上进行训练)。调整超参数是指如果你不小心就会有很高的过度拟合风险。

CV不是通过输入 10 批数据来“训练”模型的方法。

相反,交叉验证是对抗过拟合的好方法!


为什么 -fold CV?k

假设您有一个模型,并且您想要估计其样本外性能......

您可以评估用于拟合模型的相同数据的预测误差(即训练误差),但这显然不是样本外性能的良好指标。如果模型确实过拟合,它在新的观察中表现不佳,但您仍然会观察到较低的训练误差。

或者,您可以将数据分成两部分(训练/测试)并使用训练集来拟合模型。然后使用模型从未以任何方式看到的其余数据来估计样本外性能。伟大的!但是如果我们使用不同的拆分呢?事实证明,从不同拆分获得的结果之间的差异可能非常大……实际上如此之大,以至于数据拆分仅对非常大的才是可靠的。n

这就是 -fold CV 试图通过重复执行以下操作来解决的问题:k

  • 观察拟合你的模型;nnk
  • 观察它在剩余的观察中的表现,这些观察没有用于拟合你的模型nk

你重复这个过程次,每次都忽略下一个观测值进行测试,直到所有观测值都被用作测试集一次。然后,您将每个折叠的测试集上的错误求和(或计算加权平均值),并且您对样本外性能的估计对使用的特定拆分不太敏感,因为现在有个。knkk


这会导致过拟合吗?

现在回答你的问题:

由于每个折叠都将用于训练模型(在次迭代中),这不会导致过度拟合吗?k

每个折叠确实用于训练相同的模型......从头开始因此,虽然训练集之间确实存在重叠,因此您确实在(部分)相同的数据上多次拟合模型但您并没有重用数据来更新您的估计!

如果您的模型在特定折叠中过度拟合,则该折叠的训练误差将低于该折叠的测试误差。因此,当对所有折叠的误差求和/平均时,过度拟合的模型将具有较低的交叉验证性能。


:更好的是,如果你能负担得起计算,那就是重复倍 CV 多次。k