模型评估与选择(上)
先画思维导图
一、经验误差与过拟合
- 误差:模型对样本的预测结果和样本的真实输出的差异称为 误差。给定一个数据集,将其分割为训练集和测试集
- 训练误差 (Training Error)
模型在训练集上的误差称为 训练误差 - 测试误差 (Testing Error)
模型在测试集上的误差称为 测试误差
- 训练误差 (Training Error)
1.1 欠拟合 (Underfitting) 和 过拟合 (Overfitting)
我们想要的是得到的模型既有小的训练误差,也有小的测试误差,但很多时候事与愿违,造成了模型的欠拟合或过拟合。
-
欠拟合指我们训练的模型在训练集上的表现就不好,即训练误差就很大,测试误差通常也很大。
-
过拟合指我们训练但模型在训练集上的表现好,但在测试集上的表现很差,即训练误差就很小,但测试误差很大。
分类问题举例:
- 我们想要找到一个好的分类边界,来区分两个不同的类,直觉上就可以看出,下面图中的蓝线是比较理想的分类边界,对训练集和测试集的分类都比较好。
- 下图中的分类边界就很“离谱“,对于训练集的分类效果就很差,这是欠拟合的现象。
- 下图中的边界对于训练集的分类特别好,把所有的正例和负例完美分类了,但测试集上的表现很差。
- 欠拟合引起的原因其实就是机器对这个事物所进行的研究过少了,举个例子,它只知道这是圆圆的那是方方的,而不知道甜和苦,大和小,各种颜色。那对它来说对西瓜进行分类是很困难的。人也要对某一事物足够了解才能对它进行分类。所以改进过拟合的方式就是增加数据,增加特征数,增加认识的次数。让机器了解更多有关这一事物的特征,从而实现更好的进行分类。
- 过拟合,举个不恰当的例子。先让机器充分认识人,并进行分类,但是机器过分重视了性别这一属性,然后让机器对云进行分类,然而云并没有性别这一属性。这是人所特有的,那么加上性别这个特征,机器对云的分类就会出现问题。过拟合就是在训练过程中掺杂了这一训练集所特有的成分。
原因与解决方法
-
造成欠拟合的原因是什么?
模型没有很好地捕捉到数据特征,不能很好地拟合训练集
-
怎么解决欠拟合?
- 添加其他特征项,比如组合、泛化、相关性三类特征
- 添加多项式特征,使模型变复杂
- 减少正则化参数
-
造成过拟合的原因是什么?
模型太过复杂,导致对训练集的学习能力太好,但是应用到新数据上的效果就变差
-
怎么缓解过拟合
- 重新清洗数据,可能是数据不纯导致过拟合
- 增加训练数据
- 采用正则化
- 神经网络力常采用dropout方法,在训练对时候让神经元在一些概率不工作
-
过拟合为什么不可避免?
机器学习面临的问题通常是NP-hard甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若可彻底避免过拟合,则通过训练误差最小化就能获最优解,这就意味着我们构造性地证明了“P=NP”,因此,只要相信“P≠NP”,过拟合就不可避免。
我们训练出一个模型后,可以通过训练误差和测试误差来评估模型的表现,我们所做的工作是尽量地减小训练误差和测试误差来提升模型的表现,但这都是基于给定的数据集的工作,模型的性能如何都是基于我们收集到的数据,那还有很多没有收集到的数据呢?
泛化误差 Generalisation Error
数据并不是唾手可得的,收集的往往只是一小部分数据,并且数据可能会带有偏见。
比如分类问题中,通过西瓜的色泽、根蒂和敲声来判断是否其是好瓜的问题,我们不可能收集到世界上所有西瓜的信息,我们的收集的可能是来自中国的1000个西瓜的信息,这样训练出的模型可能在预测中国的瓜是否为好瓜表现很好,但用于预测其他没见过的美洲瓜、欧洲瓜的表现可能就不如人意。
比如回归问题中,通过一个人的体重、每天摄取的蛋白质和每天摄取的脂肪量预测他的身高,数据可能全是从南方城市的人口中收集而来的,这样训练出的模型预测南方人的身高比较准确,但应用于北方人的表现就不如人意。
而机器学习的目的就是要找到一个能够适用于所有可能样本(全局数据)的好的模型,这样的模型泛化能力比较强,模型在未见过的数据上的误差,就叫做泛化误差。
偏差-方差权衡 Bias Variance Trade-off
以回归问题为例,
假设
f
(
x
)
f(x)
f(x)是要学习的真实函数,
X
X
X是所有可能的样本集合,
D
D
D是从
X
X
X中抽取的训练集,
y
y
y是数据的真实标签,考虑噪声的影响,
y
d
y_d
yd是训练集中观察到的数据,经过训练后得到了模型的预测函数
f
^
(
x
∣
D
)
\hat{f}(x|D)
f^(x∣D)。
上面说过,训练误差是模型预测的值和训练集里观察到的的值的差距,也叫做经验误差/经验风险(Empirical Error/Risk)这里使用最小平方误差(Least Square Error)来体现
E T ( D ) = ∑ x ∈ D ( f ^ ( x ∣ D ) − y d ) 2 E_T(D)=\sum_{x\in D} (\hat{f}(x|D)-y_d)^2 ET(D)=x∈D∑(f^(x∣D)−yd)2
训练误差只是基于一个训练集 D D D训练后的结果,还有很多的样本没有考虑到,在现实中,有的样本出现的频率会很高,有的样本出现频率会很低,如果选取到数据大多是出现频率低的训练样本,训练出的模型泛化能力就比较差。
而泛化误差表现了模型在没有出现过的数据集上的性能,需要考虑到全局数据。
如果要表示泛化误差,一种思路是通过将抽取的训练集 D D D从所有可能样本的集合 X X X中去除,用剩余的所有数据来计算模型的泛化误差:
E G ( D ) = ∑ x ∈ X − D ( f ^ ( x ∣ X − D ) − y d ) 2 E_G(D)=\sum_{x\in X-D}(\hat{f}(x|X-D)-y_d)^2 EG(D)=x∈X−D∑(f^(x∣X−D)−yd)2
另一种思路是考虑从所有样本中选取到每个样本的情况,我们假设 D D D是以 p ( x ) p(x) p(x)的概率分布从 X X X中抽取的训练集,也就是说从 X X X中抽取出第 i i i个样本的概率是 p ( x i ) p(x_i) p(xi),那么就可以使用期望来计算模型的泛化误差
E G ( D ) = ∑ x ∈ X p ( x ) ( f ^ ( x ∣ D ) − y d ) 2 E_G(D)= \sum_{x\in X}p(x)(\hat{f}(x|D)-y_d)^2 EG(D)=x∈X∑p(x)(f^(x∣D)−yd)2
我们的理想是最小化泛化误差,但所做的实际工作是最小化训练误差或者是测试误差,因为现实情况中,一般不能收集到所有可能样本的数据,也无法得知收集到数据在样本中的概率情况,所以我们使用训练误差或测试误差来近似代表泛化误差。下面介绍的方差-偏差分解,西瓜书和很多文章中都是使用训练误差 E T ( D ) E_T(D) ET(D)来进行分解的,但实际上使用原本的泛化误差 E G ( D ) E_G(D) EG(D)得出的结论是一样的。
-
什么是偏差(Bias)?
模型的平均预测结果与真实函数的输出的差距,衡量了模型和真实函数的接近程度
-
什么是方差(Variance)?
使用不同的相同规模数据集时,模型预测的结果平均预测结果的差距,衡量了模型的稳定程度
如果把训练模型的过程比喻为射靶,我们所需要的真实函数 f ( x ) f(x) f(x)就在红色靶心处,它的实际输出值为 y y y,整个靶的蓝色范围为target space,基于不同的训练集,我们训练出不同的模型函数 f ^ ( x ) \hat{f}(x) f^(x),这些函数像一根根不同的箭射在橙色的hypothesis Space中,为了衡量它们的平均表现,找出期望模型,计算它们的期望函数:
f ˉ ( x ) = E D [ f ^ ( x ∣ D ) ] \bar{f}(x)=E_D[\hat{f}(x|D)] fˉ(x)=ED[f^(x∣D)]
设该期望函数的输出值为 y ˉ \bar{y} yˉ
偏差为:
B = ( f ^ m ( x ) − y ) 2 B=(\hat{f}_m(x)-y)^2 B=(f^m(x)−y)2
方差为:
V = E d ( f ^ ( x ∣ D ) − f ˉ ( x ) ) 2 V=E_d(\hat{f}(x|D)-\bar{f}(x))^2 V=Ed(f^(x∣D)−fˉ(x))2
噪声为:
N = y − y d N=y-y_d N=y−yd
泛化误差可以进行分解:
即泛化误差 = 方差 + 偏差 + 噪声
-
如果我们的模型越简单,箭就会射得里靶心越远,橙色区域会越偏离中心,偏差就会越大
-
如果我们的模型越复杂,橙色区域在靠近中心的同时,范围会变大,模型变得不稳定,方差就会越大
举个回归的简单例子,假设我们所要求的真实函数为 f ( x ) = 3 x 2 + 2 f(x)=3x^2+2 f(x)=3x2+2
-
如果训练出的模型很简单,为一次项式 f ^ ( x ) = a x + b \hat{f}(x)=ax+b f^(x)=ax+b (a, b为常数),那么再怎么改变a, b的取值,这个函数不可能达到真实函数(橙色区域就不包含靶心),甚至很难接近,这就是欠拟合,偏差较大
-
如果训练出的模型很复杂,为四次项式 f ^ ( x ) = a x 4 + b x 3 + c x 2 + d x + e \hat{f}(x)=ax^4+bx^3+cx^2+dx+e f^(x)=ax4+bx3+cx2+dx+e,那么这个函数是有可能达到我们的真实函数的(橙色区域包含靶心),但是由于次数太多,可能取到的函数非常非常多(橙色区域很大),所以模型可能离靶心也很远,这就是过拟合,方差较大
通过什么样的途径,使得方差和偏差都减小,是需要解决的问题。
PS:噪声是训练的过程中无法解决的问题,是标记的数据和真实的数据的差异,比如在判断图片是猫还是狗的问题中,标注人员把猫的图片误标记成了狗,对训练的结果产生了影响,这就是噪声产生的误差。
(至此,上篇结束,下篇主要讲述各种评估方法以及性能度量的方式