您如何向没有数据分析背景的人描述交叉验证?
用简单的英语进行交叉验证?
考虑以下情况:
我想搭地铁去我的办公室。我的计划是坐我的车,停在地铁上,然后坐火车去我的办公室。我的目标是每天早上 8.15 赶上火车,这样我就能准时到达我的办公室。我需要决定以下几点:(a)我需要离开家的时间和(b)我开车去车站的路线。
在上面的例子中,我有两个参数(即离开家的时间和去车站的路线),我需要选择这些参数,以便我在早上 8.15 到达车站。
为了解决上述问题,我可能会在周一、周三和周五尝试不同的“参数”集(即出发时间和路线的不同组合),看看哪个组合是“最佳”组合。这个想法是,一旦我确定了最佳组合,我就可以每天使用它,从而实现我的目标。
过拟合问题
上述方法的问题在于我可能会过度拟合,这基本上意味着我确定的最佳组合在某种意义上可能是周一、周三和周五所独有的,并且该组合可能不适用于周二和周四。如果在寻找时间和路线的最佳组合时,我利用了周一/周三/周五交通状况的某些方面,而这在周二和周四不会发生,则可能会发生过度拟合。
过度拟合的一种解决方案:交叉验证
交叉验证是过度拟合的一种解决方案。这个想法是,一旦我们确定了参数的最佳组合(在我们的例子中是时间和路线),我们就会在不同的上下文中测试该组参数的性能。因此,我们可能还想在周二和周四进行测试,以确保我们的选择也适用于那些日子。
将类比扩展到统计
在统计学中,我们也有类似的问题。我们经常使用一组有限的数据来估计我们不知道的未知参数。如果我们过拟合,那么我们的参数估计将非常适用于现有数据,但当我们在其他环境中使用它们时效果不佳。因此,交叉验证通过向我们证明参数估计不是我们用来估计它们的数据所独有的,从而有助于避免上述过度拟合问题。
当然,交叉验证并不完美。回到我们的地铁示例,即使在交叉验证之后,由于各种问题(例如,施工、交通量随时间的变化等),我们的最佳参数选择可能在一个月后无法正常工作。
我认为最好用下图来描述(在这种情况下显示 k 折交叉验证):
交叉验证是一种用于防止预测模型过度拟合的技术,特别是在数据量可能有限的情况下。在交叉验证中,您对数据进行固定数量的折叠(或分区),对每个折叠运行分析,然后平均总体误差估计。
“通过确保经过训练的模型在独立数据上表现良好,避免死记硬背。”
假设您调查了某个过程;你已经收集了一些描述它的数据,并且你已经建立了一个模型(无论是统计的还是机器学习的,都没有关系)。但是现在,如何判断是否可以呢?可能它与构建它的数据非常吻合,所以没有人会相信你的模型是如此出色,以至于你认为。
第一个想法是分离数据的一个子集,并使用它来测试您的方法在其余数据上构建的模型。现在结果绝对没有过度拟合,但是(特别是对于小集合)你可能会(不)幸运并绘制(更少)更简单的案例来测试,从而(更难)更容易预测......还有你的准确性/误差/优度估计对于模型比较/优化是没有用的,因为您可能对它的分布一无所知。
如有疑问,请使用蛮力,因此只需复制上述过程,收集一些准确性/错误/优度的估计值并将它们平均 - 这样您就可以获得交叉验证。在更好的估计中,您还将获得直方图,因此您将能够近似分布或执行一些非参数测试。
就是这样;测试列车分裂的细节是不同 CV 类型的原因,但除了极少数情况和小的强度差异之外,它们是相当等价的。确实这是一个巨大的优势,因为它使它成为一种防弹的方法;很难欺骗它。