有时候,模型在训练数据集上更准确时,这个模型在测试集上不一定更准确,这是为什么呢?
一、训练误差和泛化误差
训练误差是指在训练集上表现出的误差,而泛化误差是指在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。
我的理解:由于训练误差是经过模型在训练集上反复训练的,它的结果会更倾向于训练集的结果。那么如果将其损失值降得过低,就好像是这个模型专门为这个训练集训练了一组参数。显然,这组参数就不那么容易去适应测试集中随机出现的一组数据。如此,训练误差低的,泛化误差就可能还更高一些了。
二、模型选择
在机器学习中,通常需要评估若干个候选模型,从中找出适合的模型。这个过程称为模型选择。下面总结几个模型选择中的概念。
1. 验证数据集
严格意义上,测试集只能在所有超参数和模型参数选定之后使用一次。不能看哪个模型在测试集上的效果好就选哪个,因为测试集是用来测试模型的。有鉴于此,我们可以预留一部分训练集和测试集以外的数据来进行模型选择。比如,我们可以将训练集中的一部分作为验证集,而剩余部分作为真正的训练集。
2. K K K折交叉验证
由于数据不容易获取,预留大量的验证数据显得太奢侈。 K K K折交叉验证是一种改善的方法。该方法的做法是:
- 将原始训练数据集分割成 K K K个不重合的子数据集
- 进行 K K K次训练和验证。每一次,选一个子数据集作为验证集,剩下 K − 1 K-1 K−1个子数据集作为训练集
- 最后,对这 K K K次训练误差和验证误差分别求平均
这种做法充分利用了现有的数据集。
三、欠拟合和过拟合
- 欠拟合(underfitting):模型无法得到较低的训练误差
- 过拟合(overfitting):模型的训练误差 < < << << 在测试集上的误差
出现这两种现象的因素有很多。这里重点讨论两个因素:模型复杂度、训练数据集大小
1. 模型复杂度
其实这个我感觉和“我的理解”里面说的差不多。假如一个模型过于复杂,就相当于是专门为这个数据集找了个模型一样,不具有普适性,就会出现过拟合。但是如果过于简单,又会出现欠拟合。
2. 训练集大小
一般来说,如果训练集样本过少,特别是模型参数数量更少时,过拟合更容易发生。