在机器学习种,我们通常把样本分为训练集和测试集,训练集用于训练模型,测试集用于评估模型。在样本划分和模型验证的过程中,存在着不同的抽样方法和验证方法。

在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?

Holdout检验

Holdout检验是最简单也是最直接的验证方法,它将原始的样本集合随机划分成训练集和验证集两部分。比方说,对于一个点击率预测模型,我们把样本按照70%~30%的比例分成两部分,70%的样本用于模型训练;30%的样本用于模型验证,包括绘制ROC曲线、计算精确率和召回率等指标来评估模型性能。

Holdout检验的缺点很明显,即在验证集上计算出来的最后评估指标与原始分组有很大关系。为了消除随机性,研究者们引入了“交叉验证”的思想。

交叉验证

k-fold交叉验证:首先将全部样本划分成k个大小相等的样本子集;依次遍历这k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后把k次评估指标的平均值作为最终的评估指标。在实际实验中,k经常取10。

留一验证:每次留下1个样本作为验证集,其余所有样本作为测试集。样本总数为n,一次对n个样本进行遍历,进行n次验证,再将评估指标求平均值得到最终的评估指标。在样本总数较多的情况下,留一验证法的时间开销极大。事实上,留一验证是留p验证的特例。留p验证是每次留下p个样本作为验证集,而从n个元素中选择p个元素有$C_n^p$种可能,因此它的时间开销更是远远高于留一验证,故而很少在实际工程中被应用。

自助法(Bootstrap)

不管是Holdout检验还是交叉检验,都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果,而自助法可以比较好地解决这个问题。

自助法是基于自主采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。

在自助法的采样过程中,对n个样本进行n次自助抽样,当n趋向于无穷大时,最终有多少数据从未被选择过?

一个样本在一次抽样过程中未被抽中的概率为$\left(1-\frac{1}{n}\right)$,n次抽样均未抽中的概率为$\left(1-\frac{1}{n}\right)^n$。当n趋于无穷大时,概率为$\lim_{n\to\infty}\left(1-\frac{1}{n}\right)^n$。

根据重要极限,$\lim_{n\to\infty}\left(1+\frac{1}{n}\right)^n=e$

所以有:

因此,当样本数很大时,大约有36.8%的样本从未被选择过,可作为验证集。