0
点赞
收藏
分享

微信扫一扫

重温机器学习概念:偏差(Bias)、方差(Variance)、欠拟合(Underfitting)、过拟合(Overfitting)

waaagh 2022-01-24 阅读 22

写在前面

在机器学习中,我们经常用过拟合、欠拟合来定性地描述模型是否很好地解决了特定的问题。实际上,我们还可以用偏差和方差来定量地描述模型的性能。

偏差和方差的定义

在监督学习中,模型的泛化误差来源于两个方面:偏差和方差

偏差和方差的定义:

  • 偏差(Bias):由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的平均值和真实模型输出之间的距离。
  • 方差(Variance):由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的方差。

情景引入

假设我们现在要预测一只神奇宝贝进化后的cp值(战力点数),只有Niantic这个游戏公司知道实际的cp值(因为他有对应的函数 f ^ \hat f f^

我们能做的是:从一堆训练数据中,找到一个函数 f ∗ f^* f,用 f ∗ f^* f来估计 f ^ \hat f f^

这就好比你现在在打靶, f ^ \hat f f^是靶的中心点,你收集到一堆训练数据,得到你觉得最好的函数 f ∗ f^* f,它落在靶上的某处,它跟 f ^ \hat f f^有一段距离,这个距离可能来自Bias,也可能来自Variance。

现在我们想估计靶的中心 f ^ \hat f f^(理想情况的函数)。当你收集一堆训练数据,得到一个函数 f ∗ f^* f,这就相当于你往靶上打了一枪。

上面提到要收集很多堆训练数据,但通常我们手里不是只有一个训练集吗?我们要怎么找到那么多堆训练集呢?

你可以想象有很多的平行宇宙,每个宇宙里都可以收集到一堆训练集,比如每个宇宙里都去抓10只Pokemons作为训练集,来得到一个 f ∗ f^* f。显然不同宇宙中,抓到的Pokemons是不一样的,所以得到的 f ∗ f^* f也是不一样的。

方差(复杂模型学得的 f ∗ f^* f受数据集影响大)

假设我们有100个平行宇宙,收集到100个不同的 f ∗ f^* f

对于简单的模型(函数空间: y = b + w ⋅ x c p y=b+w \cdot x_{c p} y=b+wxcp),它得到的100个 f ∗ f* f是比较集中的,而复杂的模型得到的100个 f ∗ f* f散布就比较广,即枪不太稳)。

这里你可能就会有个疑问了,为什么复杂模型得到的100个 f ∗ f* f的散布就比较广呢?主要是因为简单模型比较不会受你训练集的影响。复杂模型学得的 f ∗ f^* f受数据集影响大,由于训练样本只有m个,数据集太少了,你稍微哪个样本,复杂模型为了拟合好这个训练集,形状变化就会很大,导致射出去的 f ∗ f^* f分散得比较开,所以方差比较大,也就是说,方差通常是由于模型的复杂度相对于训练样本数m过高导致的。

偏差(简单模型的函数空间比较小)

上面我们在讲枪的性能稳不稳(方差),现在我们再来看看枪一开始瞄的准不准(偏差)。

偏差(Bias)的大小取决于这100个 f ∗ f^* f的平均值 f ˉ \bar f fˉ E [ f ∗ ] = f ˉ E[f^*]=\bar f E[f]=fˉ)与理想函数 f ∗ f^* f的距离

这是你可能又有疑问了,为什么简单模型的偏差大,复杂模型的偏差小呢?这就要从函数空间的角度来解释了。

  • 简单模型的函数空间比较小,你的目标 f ^ \hat f f^根本就不在这个空间里,所以会有很大的偏差,而由于这个空间比较小,所以方差是比较小的。

  • 复杂模型的函数空间比较大,目标 f ^ \hat f f^在这个空间里,只不过他没有办法找到这个 f ^ \hat f f^在哪里,因为数据集太少了,你稍微哪个样本,复杂模型为了拟合好训练集,形状变化就会很大,导致射出去的 f ∗ f^* f分散得比较开,所以方差比较大,而他们是分散在这个 f ^ \hat f f^周围的,你平均一下的话,得到的 f ˉ \bar f fˉ是很接近 f ^ \hat f f^的,所以偏差比较小。

偏差&&方差 vs. 欠拟合&&过拟合

如果你的泛化误差(test loss)主要是因为方差(Variance)偏大,这个现象就是过拟合(overfitting)。

  • 过拟合的主要原因是数据集比较少,复杂模型受数据集改动的影响比较大(比如多了个噪音点,模型为了拟合好它,就大变样了,也就是枪的波动比较大)

如果你的泛化误差(test loss)主要是因为偏差(Bias)偏大,这个现象就是欠拟合(underfitting)。

  • 欠拟合是因为你的模型过于简单,函数空间太小, f ^ \hat f f^不在这个空间里面,那你瞄的位置都不是靶心,肯定偏差大。

现在我们可以总结下面三个概念之间的关系了:

如果你的train loss大,说明你偏差(Bias)偏大(定量),这个现象叫做欠拟合现象(定性)

如果你的train loss小,但test loss大,说明你方差(Variance)偏大(定量),这个现象叫做过拟合现象(定性)

如何判断和解决欠拟合或过拟合现象

在这里插入图片描述
判断方法

  • 如果你的train loss大,说明你偏差(Bias)偏大(定量),这个现象叫做欠拟合(underfitting)现象

  • 如果你的train loss小,但test loss大,说明你方差(Variance)偏大(定量),这个现象叫做过拟合(overfitting)现象

解决方法

情况1:偏差(Bias)偏大(即欠拟合现象)的解决方法

  • 增加更多的特征
  • 重新设计模型,让模型更复杂

下图是不断提高模型复杂度后的效果
在这里插入图片描述

情况2:方差(Variance)偏大(即过拟合现象)的解决方法

需要注意的是,当你想通过正则化限制模型复杂度的时候,你是可以降低方差的,从而缓解过拟合现象,但是你也不能过分地限制模型复杂度,因为这是会增大偏差的。

打靶图

在网上很多人讲偏差和方差都会拿下面这么个图,但是很少有人解释清楚这个图是怎么产生的以及上面这些点都是什么意思。
在这里插入图片描述

解释:这个图是以一次射击的例子来描述偏差和方差的区别和联系。

假设一次射击就是一个机器学习模型对一个样本进行预测。射中靶心位置代表预测准确,偏离靶心越远代表预测误差越大。

具体做法:我们通过n次采样得到n个大小为m的训练样本集合,训练处n个模型,对同一个样本做预测,相当于我们做了n次射击。

参考资料

嘿嘿,完结撒花❀
在这里插入图片描述

举报

相关推荐

0 条评论