李宏毅机器学习系列-误差从哪来

误差从哪来

我们继续上次的精灵宝可梦的CP值回归的例子,来看下上次的测试集的平均误差图,那误差从哪里来呢,从偏差和方差来,那么是偏差和方差呢,我们马上会讲到:
在这里插入图片描述

我们的估计

我们先来回顾下上次我们做的事情,就是预测一个方法,输入是宝可梦的信息,输出是CP值,即我们想知道的是 y ^ \hat y y^:
在这里插入图片描述
真实的 y ^ \hat y y^估计我们不知道,我们只能取逼近他,知道的人可能只有设计者Niantic,就像:
在这里插入图片描述
但是我们可以从很多的数据里面去找一个 y ∗ y* y作为 y ^ \hat y y^的估计,举个打靶的例子,真实的 y ^ \hat y y^就是靶心,而我们估计出来的 y ^ \hat y y^没有在靶心,因此会产生偏差和方差:
在这里插入图片描述

估计的偏差和方差

先来看看偏差,如果我们要估计一个变量的分布,假设图的均值为 μ \mu μ,方差为 σ 2 \sigma^2 σ2.
首先我们收集x的一些样本去估计 μ \mu μ,比如收集到N个样本 { x 1 , x 1 , . . . , x n } \{x^1,x^1,...,x^n\} {x1,x1,...,xn}
计算平均值为 m = 1 N ∑ n x n m=\frac{1}{N} \sum_{n} x^n m=N1nxn
但是不等于 μ \mu μ,除非能穷举所有的样本,我们可以看到m距离 μ \mu μ是有一定的偏差的,
但是如果我们求m的期望的话,最后就变成:
E ( m ) = E [ 1 N ∑ n x n ] = 1 N ∑ n E [ x n ] = μ E(m)=E[\frac{1}{N} \sum_{n} x^n]=\frac{1}{N}\sum_{n} E[x^n]=\mu E(m)=E[N1nxn]=N1nE[xn]=μ
在这里插入图片描述
这个就是无偏估计,没有偏差。

我们来再来看看m的方差,这个式子在概率和数理统计的课本里有:
V a r ( m ) = σ 2 N Var(m)=\frac{\sigma^2}{N} Var(m)=Nσ2
可以看到方差是跟N有关的,N越大,方差越小,反之就越大,如下图,方差表示离目标距离多远的。
在这里插入图片描述
现在我们来算一下x的方差:
s 2 = 1 N ∑ n ( x n − m ) 2 s^2=\frac{1}{N} \sum_{n} (x^n-m)^2 s2=N1n(xnm)2
那他期望就是:
E ( s 2 ) = N − 1 N σ 2 E(s^2)=\frac{N-1}{N}\sigma^2 E(s2)=NN1σ2
不等于 σ 2 \sigma^2 σ2,所以是有偏差的,但是可以看到N越大,越靠近 σ 2 \sigma^2 σ2,如果变得很大的话,就很接近 σ 2 \sigma^2 σ2,如果N是无穷的话,其实就等于 σ 2 \sigma^2 σ2,但是没办法穷举所有的样本。
在这里插入图片描述
好,那现在我们来对偏差和方差做个可视化,还是打靶的例子,先来看下下面的图:
在这里插入图片描述

左上角的是最好的情况,偏差很小,也就是距离我们平均瞄准的准心距离靶心很小,方差也小,也就是打击点离瞄准点的距离,也可以看成是分散程度,总结起来就是瞄的准,枪性能好打的也准。

右上角的偏差很小,平均的准心近靶子的准心,说明瞄准的好,但是偏差就比较大,很分散,可能是因为射击的时候手抖了,或者本身枪有点问题,也就是瞄的准,但是实际上打的偏了。

左下角是偏差大,方差小,也就是平均瞄的就不准,但是枪性能好,打的准,打到的点离你瞄的地方距离小,所以分散度小。

右下角是偏差大,方差也大,就是瞄的不准,枪性能差,打的也不准,又偏又散。

拿我们估计的方法的期望 E [ f ∗ ] = f ‾ E[f^*]=\overline{f} E[f]=f来说,其实就是我们打靶的瞄准点 f ∗ f^* f的均值:
在这里插入图片描述
可以看到,瞄准点的均值到靶心的距离就是偏差,各个瞄准点到平均瞄准点的距离也就是方差。

获得更多数据

那我们怎么去找那么多的 f ∗ f^* f,怎么去找他们的偏差和方差呢?假设我们有很多的平行宇宙,每个宇宙里面都有10个样本的数据,我们都可以找到 f ∗ f^* f,就能求得偏差和方差:
在这里插入图片描述
我们用相同的模型,去得到不同的 f ∗ f^* f,比如下图就是两种不同的参数对应的估计 f ∗ f^* f
在这里插入图片描述

观察结果

如果我们收集100个批次的数据,然后做实验,用不同的模型去看结果,发现越复杂的模型,越不平滑:
在这里插入图片描述
我们用最简单模型和五次方模型做比较,发现简单的线性模型有比较小的方差,都比较集中,而复杂的就比较散乱,所以方差大。那为什么简单的模型方差小,复杂的大呢,因为简单的模型对于不同数据造成的影响比较小,这个前面回归篇也右讲过,简单的模型对于数据的变动不敏感,复杂的会敏感,因此简单的抗噪性比较好,复杂的稍微有点变动,就会引起很大的变化,因此数据就显得比较散乱。当然也可以用极端的方法来考虑,如果简单模型变成一个常数了,那无论数据怎么变,他都不变,非常稳定,但是就是没什么用了:
在这里插入图片描述
那我们现在要看看这些模型的结果 f ∗ f^* f跟我们的 f ^ \hat f f^有多接近呢,我们也不知道 f ^ \hat f f^,只能先假设一个了,比如下图:
在这里插入图片描述

然后我们可以衡量刚才那些模型和假设的偏差了,黑色的是真实的 f ^ \hat f f^,红色的是5000次 f ∗ f^* f,蓝色的是5000次 f ∗ f^* f的平均值 f ‾ \overline{f} f
在这里插入图片描述
我们拿最简单的模型和最复杂的模型来分析,我们发现简单的模型偏差比较大,复杂的比较小,这个也好理解,因为模型简单,他的分布范围比较小,也许就没有覆盖到靶心,所以偏差就会那么大,而复杂的网络已经包含简单的网络,比他覆盖的范围大的多,所以可以覆盖到靶心,偏差就小:
在这里插入图片描述

偏差和方差对误差的影响

我们绘制出偏差和方差,已经观察到的误差的图,红色的是偏差造成的误差,绿的是方差造成的,合起来就是蓝色的误差,发现偏差造成的误差是越来越小的,说明你瞄的很准,但是方差造成的是越来越大的,但是会有个地方误差最小,也就是方差和偏差都比较小的地方,我们把偏差很小方差很大的情况叫做过拟合也就是误差大部分来自于方差,模型太复杂了,把偏差很大,方差很小叫做欠拟合也就是误差大部分来自偏差,模型太简单了:
在这里插入图片描述

如何处理高偏差

因此我们就能可以根据这些来分析我们的误差是因为偏差大还是因为方差大,简单来说就是训练集都拟合不好,可能就是偏差大,欠拟合,如果训练集拟合的好,测试集不好,可能就是方差大,过拟合。如果是偏差大,说明模型可能太简单了,要重新设计模型,考虑跟多的特征:
在这里插入图片描述

如何处理高方差

对于高方差,我们有两个方法,一个是增加样本量,这个很直觉,为了避免以偏概全,所以要尽可能多的样本,第二种就是中正则化,这个前篇回归里也有讲过,就是让模型越来越平滑,限制他的参数过大,模型越平滑,对变化就不敏感,当然就不会很散乱了,即降低了方差,但是模型能力被抑制了,可能会增加偏差:
在这里插入图片描述

模型的选择

通常我们要选择的模型看到是希望偏差和方差都小,但是不要用测试集来选模型,因为测试集和真实的测试集是不一样的,他有自己的偏差和方差,测试集只是用来做预测,不要来训练模型,否则可能会发现测试集上的误差都小了,但是真实的测起来却大起来了:
在这里插入图片描述
比如说kagglel上的比赛,你以为在公共的测试集上的误差很小了,排名很靠前了,然后截至日期一到,换到私有的测试集上时,很尴尬,结果并不好,排名还下去好多:
在这里插入图片描述

交叉验证

合适的做法应该是将训练集分成训练和验证的两个子集,在验证集上调整你的参数选择好的模型,最后在整个训练集上训练模型,训练完了去公共的测试集上测试,如果误差大了也不建议用测试集来调整参数,否则测试集跟训练集就没啥区别了,你把公共测试集上的偏差和方差考虑进去了,这样你在公共测试集上的结果没办法反应到真实的测试集上去了,当然很多时候你还是会想办法去把你的训练集误差降低:
在这里插入图片描述
如果你可能怀疑误差跟训练集和验证集的分发有关,那可以采用交叉验证的方法,分别训练几次,每次都选择不同的训练集和验证集,然后取平均最好的模型,再进行测试,原则上不要去用公共测试集去调整模型:
在这里插入图片描述

总结

介绍了那么多关于误差怎么来的,偏差和方差是什么,怎么来的,怎么减少他们,怎么来进行训练集和测试集的使用等等。主要还是通过打靶的例子来理解,相信可以学到不少东西。附上思维导图:
在这里插入图片描述

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件或者网络,侵删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值