一.训练误差与测试误差
1.1 基本概念
在分类任务中,通常把错分的样本数占样本总数的比例称为错误率(error rate)。比如m个样本有a个预测错了,错误率就是 E = a/m;与错误率相对的 1 - a/m 称为精度(accuracy),或者说正确率,数值上 精度 = 1 - 错误率。
更一般地,我们通常会把学习器的实际预测输出与样本的真实输出之间的差异称为误差(error)。学习器在训练集上的误差称为训练误差(training error)或者经验误差(empirical error)。而在新样本上的误差则称为泛化误差(generalization error)或者测试误差(test error;)。显然,我们希望得到泛化误差小的学习器。所以我们希望模型的泛化误差尽可能小,但现实是,我们无法知道新样本是怎样的,所以只能尽可能地利用训练数据来最小化经验误差。
如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,
帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,
又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,
想转行怕学不会的,都可以加入我们644956177。
群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!
1.2 训练误差
1.3 泛化误差(测试误差)
1.4 过拟合
是否经验误差小,泛化误差就一定小呢?这不是一定的,如果模型相比训练数据来说过于复杂,那就很有可能把训练样本自身的一些特点当作整个样本空间的特点,这样就会导致泛化性能下降,从而使得在训练数据上有很小的经验误差,但一旦面对新样本就会有很大误差,这种情况叫做过拟合(overfitting),亦称过配。相对的是欠拟合(underfitting),亦称欠配。
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。
下图展示了训练误差、测试误差与模型复杂程度之间的关系:
随着模型复杂程度的增加:
- 训练误差逐渐减小,甚至为0;
- 测试误差先减小,达到最小值后,又增大。
- 当模型过于复杂时,将产生过拟合。
欠拟合比较容易克服,只要适当地增加模型复杂度(比方说增加神经网络的层数或者训练轮数,扩展决策树学习中的分支)就好。但过拟合是无法彻底避免的,我们所能做的只是缓解,或者说减小其风险(比如减少模型复杂度/增加训练数据),这也是机器学习发展中的一个关键阻碍。
这样,在学习时就要防止过拟合,进行最优的模型选择,即选择复杂度相当的模型,以达到使测试误差最小的学习目的。下面介绍几种常用的模型选择方法。