留出法 (hold-out)

直接将数据集 $D$ 分成互斥的两个集合,作为训练集 $S$ 与测试集 $T$ ,使用 $S$ 训练模型,使用 $T$ 进行测试误差。
如果从采样的角度看待数据集合划分,则保留类别比例的采样方法叫做“分层采样”(stratified sampling),也就是保持每个 label 的数据在训练集与测试集的比例不变。
为了提高模型测试的保真性(fidelity),我们经常取出约 $2/3$ ~ $4/5$ 的样本用于训练,剩余样本进行测试,并多次进行划分测试后取平均值。

交叉验证法 (cross validation)

将数据集划分为 $k$ 个大小相似的互斥子集,即 $D = D_1 \cup D_2 \cup ... \cup D_k , D_i \cup D_j = $ $\varnothing (i \neq j)$
。每个子集 $D_i$ 尽量保持数据分布一致性,然后取出一个子集作为测试集,其他子集作为训练集进行 $k$ 次测试。我们叫做“ $k$ 折交叉验证”($k$-fold cross validation)
特殊的,如果数据集 $D$ 的大小是 $m$ ,令 $k=m$ ,此时的 $m$ 折交叉验证法叫做 留出法(Leave-One-Out)。这一方法不受随机样本划分方式的影响,但是计算开销过于巨大,需要我们训练 $m$ 次模型。此外,留一法未必比其他方法更加准确,“没有免费的午餐” 定理对实验评估方法同样适用。

自助法 (bootstrapping)

从大小为 $m$ 的数据集 $D$ 中,有放回的随机取出 $m$ 条数据到 ${D}'$ 中。样本在 $m$ 次采样中始终不被采到的概率约为
$$\lim_{m\to \infty } \, \left(1-\frac{1}{m}\right)^m=\frac{1}{e}\approx 0.368$$,
即通过自助采样,初始数据集 $D$ 中约有 $36.8%$ 的样本未出现在采样数据集 ${D}'$中。于是我们将 ${D}'$ 用作训练集,将 $D\D'$ 作为测试集。我们全部应用了 $m$ 条数据集中的数据,并仍有约 $m/3$ 的测试数据。这样我们的测试结果叫做“包外估计”(out-of-bagestimate)

结论

自助法在数据集较小,难以有效划分训练集、测试集时很有用,此外自助法能从初始数据集中产生多个不同的训练集,对集成学习等方法有很大好处,然而自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差,因此数据量足够时,留出法与交叉验证法更加常用。