交叉验证如何克服过拟合问题?

机器算法验证 回归 交叉验证 模型选择 过拟合
2022-01-18 15:07:36

为什么交叉验证程序可以克服模型过拟合的问题?

4个回答

目前我想不出一个足够清晰的解释,所以我将把它留给其他人;然而交叉验证并没有完全克服模型选择中的过拟合问题,它只是减少了它。交叉验证误差没有可忽略的方差,尤其是在数据集的大小很小的情况下;换句话说,根据您使用的特定数据样本,您得到的值略有不同。这意味着如果您在模型选择中有很多自由度(例如,要从中选择一个小子集的许多特征、要调整的许多超参数、要从中选择的许多模型),您可能会过度拟合交叉验证标准由于模型的调整方式是利用这种随机变化,而不是真正提高性能的方式,你最终可能会得到一个表现不佳的模型。有关这方面的讨论,请参阅Cawley 和 Talbot “论模型选择中的过度拟合和性能评估中的后续选择偏差”,JMLR,第一卷。11,第 2079-2107 页,2010

可悲的是,当你有一个小数据集时,交叉验证最有可能让你失望,而这正是你最需要交叉验证的时候。请注意,k 折交叉验证通常比留一法交叉验证更可靠,因为它具有较低的方差,但对于某些模型来说计算成本可能更高(这就是为什么 LOOCV 有时用于模型选择,即使它具有很高的方差)。

一点也不。但是,交叉验证可以帮助您评估您的方法过度拟合的程度。

例如,如果您的训练数据回归的 R 平方为 0.50,而交叉验证的 R 平方为 0.48,则您几乎没有任何过拟合并且您感觉良好。另一方面,如果此处交叉验证的 R 平方仅为 0.3,那么您的模型性能的很大一部分来自过度拟合,而不是来自真实关系。在这种情况下,您可以接受较低的性能或尝试不同的建模策略,减少过度拟合。

我的回答比严谨更直观,但也许会有所帮助......

据我了解,过度拟合是基于使用相同数据进行训练和测试的模型选择的结果,其中您具有灵活的拟合机制:您非常紧密地拟合数据样本,以至于拟合噪声、异常值和所有另一个方差。

将数据拆分为训练和测试集可防止您这样做。但是静态拆分不能有效地使用您的数据,并且您的拆分本身可能是一个问题。交叉验证保留了训练-测试拆分的不奖励精确拟合训练数据的优势,同时还尽可能有效地使用您拥有的数据(即使用了您的所有数据作为训练和测试数据,只是不在同一次运行中)。

如果你有一个灵活的拟合机制,你需要限制你的模型选择,使它不支持“完美”,而是以某种方式复杂的拟合。您可以使用 AIC、BIC 或其他直接惩罚拟合复杂度的惩罚方法来完成,也可以使用 CV 来完成。(或者你可以通过使用不是很灵活的拟合方法来做到这一点,这是线性模型很好的原因之一。)

另一种看待它的方式是,学习是关于概括,而太紧的拟合在某种意义上不是概括。通过改变你学习的内容和测试的内容,你可以更好地概括,而不是只学习一组特定问题的答案。

交叉验证是一种很好的但不是完美的技术,可以最大限度地减少过度拟合。

如果您拥有的数据不能代表您将尝试预测的数据,则交叉验证对外部数据的效果不佳!

以下是交叉验证存在缺陷的两种具体情况:

  • 您正在使用过去来预测未来:假设过去的观察将来自与未来观察具有相同分布的同一群体,这通常是一个很大的假设。对从过去提取的数据集进行交叉验证并不能防止这种情况发生。
  • 您收集的数据存在偏差:您观察到的数据与您未观察到的数据存在系统性差异。例如,我们知道那些选择参加调查的人的受访者偏见。