最佳折叠数ķK-折叠交叉验证:留一法CV总是最好的选择吗?

机器算法验证 交叉验证 偏差-方差-权衡
2022-02-11 05:31:46

除了计算能力的考虑之外,是否有任何理由相信增加交叉验证中的折叠数会导致更好的模型选择/验证(即折叠数越高越好)?

将论证推向极端,留一法交叉验证是否必然会导致比K-折叠交叉验证?

关于这个问题的一些背景知识:我正在处理一个实例很少的问题(例如 10 个正例和 10 个负例),并且担心我的模型可能无法很好地概括/会在如此少的数据下过度拟合。

2个回答

留一法交叉验证通常不会导致比 K-fold 更好的性能,并且更有可能更差,因为它具有相对较高的方差(即,不同数据样本的值变化比k 折交叉验证)。这在模型选择标准中是不好的,因为这意味着模型选择标准可以通过仅利用特定数据样本中的随机变化的方式进行优化,而不是真正提高性能,即您更有可能过度拟合模型选择标准。在实践中使用留一法交叉验证的原因是,对于许多模型,它可以作为拟合模型的副产品非常便宜地进行评估。

如果计算开销不是主要问题,则更好的方法是执行重复的 k 折交叉验证,其中每次重复 k 折交叉验证过程,将不同的随机分区分成 k 个不相交的子集。这减少了方差。

如果你只有 20 种模式,你很可能会遇到模型选择标准的过度拟合,这是统计和机器学习中一个被忽视的陷阱(无耻插入:请参阅我关于该主题的论文)。您最好选择一个相对简单的模型,尽量不要过于激进地对其进行优化,或者采用贝叶斯方法并对所有模型选择进行平均,并根据它们的合理性加权。恕我直言,优化是统计中万恶之源,因此最好不要在不必要的情况下进行优化,并在进行时谨慎优化。

另请注意,如果您要执行模型选择,如果您还需要性能估计,则需要使用嵌套交叉验证之类的东西(即,您需要将模型选择视为模型拟合过程的一个组成部分并交叉验证以及)。

通过考虑学习曲线来选择 K 次折叠

我想争辩说,选择适当数量的Kfolds 很大程度上取决于学习曲线的形状和位置,主要是由于它对偏差的影响。这一论点延伸到留一法CV,主要取自《统计学习要素》一书,第 7.10 章,第 243 页。

关于影响的讨论K关于方差,请参见此处

总而言之,如果在给定的训练集大小下学习曲线有相当大的斜率,五倍或十倍的交叉验证将高估真实的预测误差。这种偏差在实践中是否是一个缺点取决于目标。另一方面,留一法交叉验证具有低偏差但可能具有高方差。

使用玩具示例的直观可视化

为了直观地理解这个论点,请考虑以下玩具示例,其中我们将 4 次多项式拟合到嘈杂的正弦曲线:

在此处输入图像描述

直观地和视觉上,我们预计该模型由于过度拟合而在小型数据集上表现不佳。这种行为反映在我们绘制的学习曲线中1均方误差与训练规模以及±1 个标准差。请注意,我选择在此处绘制 1 - MSE 以重现 ESL 第 243 页中使用的插图

在此处输入图像描述

讨论论据

随着训练规模增加到 50 个观察值,模型的性能显着提高。例如,将数量进一步增加到 200 只带来很小的好处。考虑以下两种情况:

  1. 如果我们的训练集有 200 个观察值,5折叠交叉验证将估计训练大小为 160 的性能,这与训练集大小 200 的性能几乎相同。因此,交叉验证不会受到太大的偏差和增加的影响K更大的值不会带来太多好处(左图

  2. 但是,如果训练集有50观察,5折叠交叉验证将估计模型在大小为 40 的训练集上的性能,并且从学习曲线来看,这将导致有偏差的结果。因此增加K在这种情况下会倾向于减少偏差。右手情节)。

在此处输入图像描述

[更新] - 对方法的评论

您可以在此处找到此模拟的代码方法如下:

  1. 从分布中生成 50,000 个点sin(x)+ϵ其中的真实方差ϵ已知
  2. 迭代i次(例如 100 或 200 次)。在每次迭代中,通过重新采样来更改数据集N来自原始分布的点
  3. 对于每个数据集i
    • 对 的一个值执行 K 折交叉验证K
    • 存储 K 折中的平均均方误差 (MSE)
  4. 一旦循环结束i完成后,计算 MSE 的均值和标准差i相同值的数据集K
  5. 对所有人重复上述步骤K在范围内{5,...,N}一路到LOOCV

另一种方法是在每次迭代时不对新数据集重新采样,而是每次都重新洗牌相同的数据集。这似乎给出了类似的结果。