经验误差与过拟合
经验误差与泛化误差
学习器的预测输出与真实样本之间的差异称为误差,根据样本的不同可以分为:
- 经验误差:又称训练误差,指学习器在训练集上的误差
- 泛化误差:指学习器在新样本(测试集)上的误差
过拟合
我们的目标是希望泛化误差尽可能的小,但是我们事先并不知道新样本是怎么样的,我们手头有的只是训练集的样本,因此我们只能努力使得训练误差最小化。但是并不是训练误差越小,泛化误差就一定会越小,因为训练样本是有限的,训练样本的特征并不能绝对代表总体样本的特征。当学习器把训练样本拟合得太好的时候,有可能会把训练集上的特征当成总体样本的特征,从而导致泛化性能不好,这种情况称为过拟合。过拟合是机器学习的关键性障碍,它只能缓解,而无法彻底避免。
举一个比较极端的例子,假设有以下两个样本,其中是否玩游戏是要预测的标签,其他是属性。
编号 | 性别 | 年龄 | 是否玩游戏 |
---|---|---|---|
1 | 男 | 18 | 是 |
2 | 女 | 16 | 否 |
在这个训练集中,样本数较少,因此学习器会把训练样本的特征错当成是总体样本的特征,误以为男生都玩游戏,女生都不玩游戏,显然这是不合理的。
评估方法
为了评估模型的泛化误差,需要用一个测试集来测试学习器对新样本的预测能力,用测试误差来近似泛化误差。一般假设测试集与训练集是从同一个分布独立采样而来,测试集与训练集一般是互斥的。测试集的选取方式通常有以下几种:
留出法
留出法是将数据集 D 划分为两个互斥的集合,一个训练集 S 和一个测试集 T,使得
D
=
S
∪
T
,
S
∩
T
=
∅
D=S\cup T,S\cap T=\empty
D=S∪T,S∩T=∅。训练集与测试集应该尽量保持数据分布的一致性,即分层采样(stratified sampling)。例如在分类任务中,要保持训练集和测试集的类别比例接近。即使这样,一般也需要进行多次实验取平均值作为结果。
留出法会带来以下问题:
- 若训练集 S 数量过大,这样训练得到的模型会接近于真实模型,但是测试集 T 数量过少,会使得泛化误差的评估不够准确
- 若测试集 T 数量过大,则会使得训练集 S 与真实样本差距过大,训练的模型可能不够好
交叉验证法
交叉验证法是将数据集 D 划分成 k 个大小接近的互斥子集,每个子集都尽量保持数据分布的一致性,然后每次用 k-1 个子集进行训练,用剩下的一个子集作为测试集。
交叉验证法的一个特例是留一法,使得 k=m,m 是总的样本数。可以看出,留一法里每个子集只有一个样本,训练使用的训练集只比总数据集 D 少一个样本,因此训练的模型较为准确。缺点是数据集大的时候训练开销很大。
自助法
前面的方法使用的数据集大小都比 D 小,而自助法(bootstrapping)得到的训练集大小与 D 一样。自助法以自助采样法(bootstrap sampling)为基础:对数据集 D 进行有放回的随机采样,采样 m 次,得到与数据集 D 大小一样的训练集 D’。注意,数据集 D 中有部分样本不会出现在训练集中,而有些样本可能出现多次,一个样本不会出现在训练集(即 m 次采样均采不到)的概率为
(
1
−
1
m
)
m
(1-\frac{1}{m})^m
(1−m1)m,取极限可以得到
lim
m
→
∞
(
1
−
1
m
)
m
=
1
e
≈
0.368
\lim_{m\to \infty}(1-\frac{1}{m})^m=\frac{1}{e}\approx0.368
m→∞lim(1−m1)m=e1≈0.368
自助法在数据集较小时作用比较大,并且可用于集成学习中。但是自助采样改变了数据的原始分布,可能会引入偏差。