交叉验证 - 为什么更多的折叠会增加变化?

数据挖掘 scikit-学习 交叉验证
2021-10-04 09:27:50

有人可以解释为什么增加交叉验证中的折叠数会增加每个折叠中分数的变化(或标准偏差)。

我已经记录了下面的数据。我正在研究泰坦尼克号数据集,大约有 800 个实例。我正在使用 StratifiedKFold 和准确度评分指标。

我认为添加更多数据会减少方差 - 所以如果我的理解是正确的,添加更多折叠会增加提供给每个拟合的数据量吗?但似乎通过的折叠越多和越少,标准偏差越低(但每个 CV 的平均准确度保持不变)

{5: {'Mean': 0.8136965664427847, 'Std': 0.015594305964595902},
 15: {'Mean': 0.8239359698681732, 'Std': 0.0394725492730379},
 25: {'Mean': 0.823968253968254, 'Std': 0.07380525674642965},
 35: {'Mean': 0.8284835164835165, 'Std': 0.08302266965043076},
 45: {'Mean': 0.8207602339181288, 'Std': 0.09361950295425485},
 55: {'Mean': 0.8243315508021392, 'Std': 0.08561359961087428},
 65: {'Mean': 0.8273034657650041, 'Std': 0.10483277787806128},
 75: {'Mean': 0.8274747474747474, 'Std': 0.11745811393744522},
 85: {'Mean': 0.8240641711229945, 'Std': 0.12444299530668741},
 95: {'Mean': 0.8305263157894738, 'Std': 0.12484655607120225},
 105: {'Mean': 0.8243386243386243, 'Std': 0.1399822172135676},
 115: {'Mean': 0.8240683229813665, 'Std': 0.12916193497823075},
 125: {'Mean': 0.8249999999999998, 'Std': 0.13334396216138908},
 135: {'Mean': 0.8306878306878307, 'Std': 0.15391278842405914},
 145: {'Mean': 0.8272577996715927, 'Std': 0.1552827992878498},
 155: {'Mean': 0.8240860215053764, 'Std': 0.16756897617377703},
 165: {'Mean': 0.8270707070707071, 'Std': 0.16212344628562209},
 175: {'Mean': 0.824, 'Std': 0.16293498557341674},
 185: {'Mean': 0.8278378378378377, 'Std': 0.1664272446370702},
 195: {'Mean': 0.8284615384615385, 'Std': 0.17533175091718106},
 205: {'Mean': 0.8265853658536585, 'Std': 0.185808841661263},
 215: {'Mean': 0.8265116279069767, 'Std': 0.188431515175417},
 225: {'Mean': 0.8288888888888889, 'Std': 0.17685175489623095},
 235: {'Mean': 0.8294326241134752, 'Std': 0.19467536066874633},
 245: {'Mean': 0.8231292517006802, 'Std': 0.2009280149561644},
 255: {'Mean': 0.823202614379085, 'Std': 0.20790684270535614},
 265: {'Mean': 0.8254716981132075, 'Std': 0.2109826210610222},
 275: {'Mean': 0.8254545454545454, 'Std': 0.2144726806895627},
 285: {'Mean': 0.8242690058479532, 'Std': 0.2182928219064767},
 295: {'Mean': 0.823728813559322, 'Std': 0.22096355056065273}}

折叠

2个回答

这已经讨论了很长时间了。对于更理论的观点,您可以在这里找到一个很好的总结。

从实际的角度来看,我会看如下。随着越来越ķ 发生两件事:

  1. 你的 ķ-1 训练褶皱尺寸增加
  2. 您的验证折叠尺寸减小

从第一点你可以得出结论,你的 ķ 模型变得更相似,因为您的训练数据变得更相似,因为您在 ķ-第折叠。这可能会导致模型方差之间的减少。

此外,由于您正在对更多数据进行训练,因此模型的相对复杂度(即与您的数据相比)会降低。在偏差-方差-权衡图中(取自 [ 1 ])

偏差方差权衡

这意味着我们正在向左移动,即我们用更少的模型方差换取更多的模型偏差(请注意,这里的模型方差比计算的方差或折叠之间的标准偏差具有更普遍和概念性的含义)。原因是我们正在将具有恒定复杂性的模型拟合到更多数据ķ增加,即学习训练数据变得更加困难。

然而,我们不仅随着训练集的增加而增加ķ. 我们也在减少验证集的大小(见上面的第二点)。因此,关于我们的验证集,可能存在更高的折间差异。如果整个数据集具有更高的方差或更多的异常值,这可能更相关。


[ 1 ] Hastie 等人的“统计学习的要素”

随着交叉验证中的测试集变小,变化会变大。

当您进行留一交叉验证 (LOOCV) 时达到极限情况,测试集中将有一个实例。有些实例会有很好的性能,而另一些则非常糟糕。变化会很大。