10 倍交叉验证与留一法交叉验证

机器算法验证 机器学习 交叉验证
2022-01-22 20:28:36

我正在做嵌套交叉验证。我读过留一法交叉验证可能有偏见(不记得为什么)。

除了留一交叉验证的较长运行时间之外,使用 10 折交叉验证还是留一交叉验证更好?

2个回答

只是稍微补充一下@SubravetiSuraj(+1)的答案

交叉验证给出了一个悲观的有偏见的性能估计,因为如果训练集更大,大多数统计模型都会得到改善。这意味着 k 折交叉验证估计在可用数据的 100*(k-1)/k% 的数据集上训练的模型的性能,而不是在 100% 的可用数据上。因此,如果您执行交叉验证来估计性能,然后使用针对所有数据进行训练的模型以供操作使用,它的性能将比交叉验证估计所建议的稍好。

留一法交叉验证近似无偏,因为每次折叠中使用的训练集与整个数据集之间的大小差异只是一个模式。Luntz 和 Brailovsky 有一篇关于此的论文(俄语)。

伦茨、亚历山大和维克多·布雷洛夫斯基。“关于在识别统计过程中获得的字符的估计。” Technicheskaya Kibernetica 3.6(1969 年):6-12。

也可以看看

判别分析中错误率的估计 Peter A. Lachenbruch 和 M. Ray Mickey Technometrics Vol。10 , 伊斯。1,1968

然而,尽管留一法交叉验证几乎是无偏的,但它往往具有很高的方差(因此,如果您使用来自同一分布的不同初始数据样本重复估计,则会得到非常不同的估计)。由于估计量的误差是偏差和方差的组合,因此留一法交叉验证是否优于 10 倍交叉验证取决于这两个量。

现在,如果将模型拟合到小数据集,则拟合模型的方差往往会更高(因为它对所使用的特定训练样本中的任何噪声/采样伪影更敏感)。这意味着如果您只有有限的数据量,10 倍交叉验证可能具有高方差(以及更高的偏差),因为训练集的大小将小于 LOOCV。因此,k 折交叉验证也可能存在方差问题,但原因不同。这就是为什么当数据集的大小较小时,LOOCV 通常会更好。

但是,我认为使用 LOOCV 的主要原因是它对于某些模型(例如线性回归、大多数核方法、最近邻分类器等)的计算成本较低,除非数据集非常小,否则我会使用如果它符合我的计算预算,或者更好的是引导估计和装袋,则进行 10 倍交叉验证。

在我看来,当您拥有一小组训练数据时,保留一个交叉验证会更好。在这种情况下,您实际上无法进行 10 次折叠来预测使用其余数据来训练模型。

另一方面,如果你有大量的训练数据,10 倍交叉验证会是一个更好的选择,因为会有太多的迭代来忽略交叉验证,并且考虑到这些结果来调整你的超参数可能不是个好主意。

根据 ISL,在做遗漏和 k 折交叉验证之间总是存在偏差-方差权衡。在 LOOCV(leave one out CV) 中,由于每个训练集包含 n-1 个示例,您可以得到具有较低偏差和较高方差的测试误差估计值,这意味着您在每次迭代中几乎使用了整个训练集。这也会导致更高的方差,因为训练集之间有很多重叠,因此测试误差估计是高度相关的,这意味着测试误差估计的平均值会有更高的方差。

k-fold CV 则相反,因为训练集之间的重叠相对较少,因此测试误差估计的相关性较小,因此平均测试误差值不会像 LOOCV 那样有很大的方差。