五、泛化能力评估
模型泛化能力的评估:用测试集对模型进行评估。通常有下列方法:
- 留出法
hold-out
。 K
折交叉验证法cross validation
。- 留一法
Leave-One-Out:LOO
。 - 自助法
bootstrapping
。
- 留出法
5.1 留出法
留出法:直接将数据切分为三个互斥的部分(也可以切分成两部分,此时训练集也是验证集),然后在训练集上训练模型,在验证集上选择模型,最后用测试集上的误差作为泛化误差的估计。
数据集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。若训练集、验证集、测试集中类别比例差别很大,则误差估计将由于训练/验证/测试数据分布的差异而产生偏差。
如:在分类任务中至少要保持样本的类别比例相似。如果从采样的角度来看到数据集的划分过程,则保留类别比例的采样方式称作“分层采样“(
strafified sampling
)。即使进行了分层采样,仍然存在多种划分方式对数据集进行划分(比如排序后再划分、随机划分…)。这些不同的划分将导致不同的训练集/验证集/测试集。因此单次留出法得出的估计结果往往不够稳定可靠。
在使用留出法时,往往采用若干次随机划分、重复进行实验评估后,取平均值作为留出法的评估结果。
5.2 K 折交叉验证
K
折交叉验证法:数据随机划分为K
个互不相交且大小相同的子集,利用K-1
个子集数据训练模型,利用余下的一个子集测试模型(一共有 种组合)。对
K
种组合依次重复进行,获取测试误差的均值,将这个均值作为泛化误差的估计。与留出法相似,将数据集划分为
K
个子集同样存在多种划分方式。为了减少因为样本划分不同而引入的差别,K
折交叉验证通常需要随机使用不同划分重复p
次,这p
次K
折交叉验证的测试误差均值作为最终的泛化误差的估计。
5.3 留一法
留一法:假设数据集中存在 个样本,令 则得到了
K
折交叉验证的一个特例。优点:由于训练集与初始数据集相比仅仅少一个样本,因此留一法的训练数据最多。
缺点:在数据集比较大时,训练 个模型的计算量太大。
5.4 自助法
在留出法和
K
折交叉验证法中,由于保留了一部分样本用于测试,因此实际训练模型使用的训练集比初始数据集小,这必然会引入一些因为训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但是计算复杂度太高。
自助法是一个以自助采样法(
bootstrap sampling
)为基础的比较好的解决方案。自助采样法:给定包含 个样本的数据集 ,对它进行采样产生数据集 :
- 每次随机从 中挑选一个样本,将其拷贝放入 中,然后再将该样本放回初始数据集 中(该样本下次采样时仍然可以被采到)。
- 重复这个过程 次,就得到了包含 个样本的数据集 。
显然, 中有些样本会在 中多次出现了; 中有些样本在 中从不出现。 中某个样本始终不被采到的概率为 。
根据极限 ,即通过自助采样,初始数据集 中约有 36.8% 的样本未出现在采样数据集 中。
将 用作训练集, 用作测试集,这样的测试结果称作包外估计
out-of-bag estimate
。自助法在数据集较小时很有用。
- 优点:能从初始数据集中产生多个不同的训练集,这对集成学习等方法而言有很大好处。
- 缺点:产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此在初始数据量足够时,留出法和折交叉验证法更常用。