为什么交叉验证程序克服了模型过度拟合的问题?
为什么交叉验证程序克服了模型过度拟合的问题?
Answers:
我暂时无法想到足够明确的解释,因此我将其留给其他人;然而,交叉验证并不能完全克服模型选择中的过度拟合问题,而只是减少了交叉验证。交叉验证错误的方差可以忽略不计,尤其是在数据集较小的情况下;换句话说,根据您使用的特定数据样本,您会得到略有不同的值。这意味着,如果您在模型选择上有很多自由度(例如,从中可以选择一个小的子集的许多功能,许多要调整的超参数,许多可以选择的模型),则可以过度拟合交叉验证条件因为模型是通过利用这种随机变化的方式进行调整的,而不是真正改善性能的方式,最终您会得到一个性能不佳的模型。有关此的讨论,请参见Cawley和Talbot,“关于模型选择中的过拟合和性能评估中的后续选择偏差”,JMLR,第1卷。2010年11月,第2079−2107页
可悲的是,当数据集较小时,交叉验证最有可能使您失望,这恰恰是最需要交叉验证的时候。请注意,k折交叉验证通常比留一法交叉验证更可靠,因为它具有较低的方差,但对于某些模型而言可能更昂贵(这就是为什么LOOCV有时用于模型选择的原因,即使差异很大)。
我的回答比严格更直观,但也许会有所帮助...
据我了解,过度拟合是基于使用相同数据进行的训练和测试而选择模型的结果,您拥有灵活的拟合机制:对数据样本的拟合非常紧密,以至于拟合噪声,离群值和所有其他差异。
将数据拆分为训练和测试集可防止您这样做。但是静态拆分无法有效地使用您的数据,拆分本身可能是一个问题。交叉验证可保持“不向训练数据完全适合训练数据”的优势,同时还能尽可能有效地利用您拥有的数据(即,所有数据都已使用作为培训和测试数据,但不能同时进行)。
如果您具有灵活的拟合机制,则需要限制模型的选择,以使其不偏爱“完美”而复杂的拟合。您可以使用AIC,BIC或其他直接惩罚拟合复杂度的惩罚方法来执行此操作,也可以使用CV来执行。(或者您可以通过使用不太灵活的拟合方法来做到这一点,这就是线性模型很好的原因之一。)
另一种看待它的方式是学习是关于泛化的,而过于紧密的拟合在某种意义上是无法泛化的。通过改变您所学的知识和所测的知识,与仅学习特定问题的答案相比,您的归纳更好。
从贝叶斯的角度来看,我不确定交叉验证会做“正确的”贝叶斯分析对比较模型没有做的事情。但是我不是100%肯定会这样做。
这称为先验预测分布。它基本上说出了模型对实际观察到的数据的预测效果如何,这正是交叉验证所做的工作,其中“先验”被替换为“培训”模型,“数据”被替换为“测试”数据。因此,如果模型B预测的数据优于模型A,则其后验概率相对于模型A会增加。由此看来,贝叶斯定理实际上将使用所有数据而不是子集进行交叉验证。但是,我对此并不完全相信-好像我们一无所获。
该方法的另一个优点是,它具有内置的“ occam剃刀”,由每个模型的先验分布的归一化常数之比给出。
但是,交叉验证对于可怕的旧“其他”或有时称为“模型规范化”似乎很有价值。我对这个“别的东西”是否重要感到不安,因为这似乎很重要-但是当它显然重要时,它却使您完全瘫痪了。只是让您头疼的事情,但您无能为力-除了思考“其他”可能是什么,然后在模型中进行尝试(这样它就不再是“其他”的一部分) 。
而且,当上述积分非常困难时,交叉验证是一种实际进行贝叶斯分析的方法。交叉验证对任何人都“有意义”-它是“机械的”而不是“数学的”。因此,很容易理解发生了什么。而且,这似乎也使您专注于模型的重要部分-做出良好的预测。