Answers:
请考虑以下情况:
我想乘地铁去我的办公室。我的计划是坐汽车,在地铁上停车,然后乘火车去我的办公室。我的目标是每天早上8.15赶火车,以便我能按时到达办公室。我需要做出以下决定:(a)我需要离开家的时间,以及(b)我开车去车站的路线。
在上面的示例中,我有两个参数(即离开家的时间和到达车站的路线),我需要选择这些参数,以便在8.15 am之前到达车站。
为了解决上述问题,我可以在星期一,星期三和星期五尝试不同的“参数”集(即出发时间和路线的不同组合),以查看哪种组合是“最佳”组合。我的想法是,一旦我确定了最佳组合,就可以每天使用它,以实现自己的目标。
过度拟合的问题
上述方法的问题在于我可能会过拟合,这实际上意味着我确定的最佳组合在某种意义上可能是周一,周三和周五唯一的,并且该组合可能不适用于周二和周四。如果在搜索时间和路线的最佳组合时,我可能会利用过度拟合的方式来开发周一/周三/周五的交通状况的某些方面,而周二和周四则不会发生这种情况。
过度拟合的一种解决方案:交叉验证
交叉验证是过度拟合的一种解决方案。这个想法是,一旦我们确定了参数的最佳组合(在我们的时间和路线中),我们就可以在不同的上下文中测试该组参数的性能。因此,我们可能还希望对Tue和Thu进行测试,以确保我们的选择在那些日子里同样有效。
将类比扩展到统计
在统计上,我们有一个类似的问题。我们经常使用一组有限的数据来估计未知的未知参数。如果我们过度拟合,那么我们的参数估计值将对现有数据非常有效,但不适用于在其他情况下使用它们的情况。因此,交叉验证通过向我们证明参数估计值并不是我们用来估计它们的数据所独有的,可以避免上述过度拟合的问题。
当然,交叉验证并不是完美的。回到地铁的例子,可能会发生这样的情况,即使经过交叉验证,由于各种问题(例如,施工,交通量随时间变化等),我们最好的参数选择也可能在一个月之内无法正常工作。
我认为最好用以下图片对此进行描述(在这种情况下,显示k倍交叉验证):
交叉验证是一种用于防止预测模型过度拟合的技术,特别是在数据量可能受到限制的情况下。在交叉验证中,您需要对数据进行固定数量的折叠(或分区),对每个折叠进行分析,然后对总体误差估计值求平均。
假设您调查了一些过程;您已经收集了一些描述它的数据,并且已经建立了一个模型(统计或ML都无关紧要)。但是现在,如何判断是否可以?它可能非常适合基于其构建的数据,因此没有人会相信您的模型如此出色以至于您认为。
第一个想法是分离数据的一个子集,并使用它来测试您的方法对其余数据的模型构建。现在的结果绝对是不需要过度拟合的,尽管如此(特别是对于小集合),您可能(不幸)幸运了,并且绘制(更少)更简单的案例进行测试,使其(更困难)更容易预测……而且您的准确性/误差/优度估计对于模型比较/优化没有用,因为您可能对其分布一无所知。
如有疑问,请使用蛮力,因此只需复制上面的过程,收集很少的准确性/错误/善意估计值并将它们取平均值即可,从而获得交叉验证。在更好的估计中,您还将获得直方图,因此您将能够近似分布或执行一些非参数检验。
就是这样;测试序列拆分的详细信息是导致CV类型不同的原因,但除了极少数情况和较小的强度差异外,它们相当等效。确实,这是一个巨大的优势,因为它使它成为了防弹公平的方法。很难欺骗它。