为什么 k 倍交叉验证比 k 倍重采样真实验证更好?

机器算法验证 机器学习 交叉验证
2022-04-06 17:03:38

我目前正在阅读机器学习教科书,并且刚刚阅读了一些关于 k-fold 交叉验证的内容,我想知道以下内容。我想估计一个参数,例如惩罚似然法的惩罚参数。为了做到这一点,我可以做两件不同的事情:

  1. 我对训练数据进行采样,以便得到k同样大的折叠,对于每个折叠,我使用其他折叠作为训练数据来获得估计y我将这些估计与实际情况进行比较y从有问题的折叠。这个,我为我的参数的每一个有趣的选择做这个,并选择误差最小的参数,平均所有折叠和每个折叠的所有成员。

  2. 我对训练数据进行采样,得到 2 个同样大的集合,其中一个用作训练数据来预测另一组的误差。对于每个有趣的 lambda,我都会记录平均误差。然后,我对数据进行重新采样,得到 2 个(不同的)同样大的集合,并在其中重复上述过程。我采样k总次数,并对这些进行平均,以获得对最佳参数的估计。

第二种方法看起来相当幼稚,我想知道它是否有问题。一般来说,有没有理由为什么人们更喜欢方法 1 而不是方法 2?是否有计算原因,甚至是统计原因?

2个回答

第二种方法的问题是训练集(可用数据的一半)小于交叉验证方法(可用数据的(k-1)/k)。由于大多数学习算法训练的数据越多,性能越好,这意味着与基于交叉验证的方法相比,第二种方法对在所有可用数据上训练的模型的性能给出了更悲观的偏差估计。极端情况下,其中 k 是可用数据集的大小(即留一法交叉验证)给出了对泛化性能的几乎无偏估计。

然而,除了偏差(估计是否系统性错误)之外,还存在方差(估计变化的程度取决于计算它的数据的选择)。如果我们使用更多的数据进行训练,这也会降低结果模型性能的可变性,但会留下更少的测试数据,因此性能估计的方差会增加。这意味着在确定每个折叠中可以使用多少数据进行训练和测试时,通常会在方差和偏差之间进行折衷(即在实践中,留一法交叉验证并不是最佳的,而几乎是无偏,它具有高方差,因此估计器具有更高的误差)。

我们使用的重采样过程的倍数越多,我们就越能减少估计器的方差。使用简单的拆分采样,只需增加折叠数即可。对于交叉验证,我们可以重复执行交叉验证,每次将数据的不同分区选择为 k 个不相交的子集并取平均值。我经常执行 100 次随机测试训练拆分(即第二种方法),但在训练和测试数据之间使用 90%/10% 拆分来减少估计器的偏差。

@Dikran 已经提供了详细的分析。交叉验证可帮助您选择模型。根据 Hoeffding 不等式,可以根据您的验证误差估计预期的样本外误差: EoutEval+O(lnMK)在哪里M是型号,和K是其中的数字N挑选用于验证的样本。如您所见,较大的K可以使样本外误差在估计中得到更好的限制。然而,另一方面,当你绘制学习曲线时,你会发现很多训练数(NK) 导致较大的样本内误差和验证误差(偏差),随着训练数量的增加,两条曲线最终收敛。所以有一个权衡K, 和NK实际上,经验法则通常是K=N10.

还有一件事(可能有点离题):更多的训练样本可能不会减少方差,请参阅我的答案here