Answers:
只是为@SubravetiSuraj(+1)的答案做些微补充
交叉验证会给性能带来一个悲观的偏差估计,因为如果将训练集做得更大,大多数统计模型都会得到改善。这意味着k倍交叉验证估计了在可用数据集的100 *(k-1)/ k%而非100%的数据集上训练的模型的性能。因此,如果您执行交叉验证以评估性能,然后使用针对所有数据训练的模型用于运营,则其性能将比交叉验证估计所建议的稍好。
留一法交叉验证近似无偏,因为每次折叠中使用的训练集与整个数据集之间的大小差异仅是一个模式。伦茨和布雷洛夫斯基(俄语)对此发表了一篇论文。
伦茨,亚历山大·亚历山大和维克多·布雷洛夫斯基。“关于在识别的统计程序中获得的字符的估计。” Technicheskaya Kibernetica 3.6(1969):6-12。
也可以看看
判别分析中的误码率估计Peter A. Lachenbruch和M. Ray Mickey Technometrics Vol。1,pp。10,伊斯 1,1968
但是,尽管留一法交叉验证近似无偏,但它往往具有较高的方差(因此,如果对来自同一分布的不同初始数据样本重复进行估算,则会得到截然不同的估算)。由于估算器的误差是偏差和方差的组合,因此留一法式交叉验证是否优于10倍交叉验证取决于这两个量。
现在,如果将模型拟合到较小的数据集,则拟合模型的方差趋向于更高(因为它对所使用的特定训练样本中的任何噪声/采样伪像更加敏感)。这意味着,如果您只有有限的数据量,则10倍交叉验证可能具有较高的方差(以及较高的偏差),因为训练集的大小将小于LOOCV。因此,k折交叉验证也可能存在方差问题,但原因有所不同。这就是为什么在数据集较小的情况下LOOCV通常更好的原因。
然而,在我看来,使用LOOCV最主要的原因是,它是对某些模型(如线性回归,最核心的方法,最近邻分类等)的计算上更便宜,除非该数据集是非常小的,我会用10倍交叉验证(如果它适合我的计算预算,或者更好的是引导估计和装袋)。
我认为,只有少量训练数据时,最好不要进行交叉验证。在这种情况下,您实际上无法做出10折来预测如何使用其余数据来训练模型。
另一方面,如果您有大量的训练数据,那么10倍交叉验证会是更好的选择,因为将有太多的迭代,而不必进行交叉验证,并且考虑到许多结果来调整您的超参数可能不是一个好主意。
根据ISL,在进行留一法和k倍交叉验证之间始终存在偏差方差的折衷。在LOOCV(留出一个CV)中,由于每个训练集都包含n-1个示例,因此可以得到具有较低偏差和较高方差的测试误差估计,这意味着在每次迭代中几乎都使用了整个训练集。这也导致较高的方差,因为训练集之间存在很多重叠,因此测试误差估计值高度相关,这意味着测试误差估计值的平均值将具有较高的方差。
对于k倍CV,情况恰恰相反,因为训练集之间的重叠相对较少,因此测试误差估计值的相关性较小,结果,平均测试误差值不会具有与LOOCV一样大的方差。