[Machine Learning] 欠拟合&过拟合(Underfitting & Overfitting)

Where does the error from?

[Machine Learning] 回归(Regression)中,我们发现,越复杂的Model不见得会给Testing Data(测试数据)越好的Performance(效果)。相反,最复杂的Model其实Performance(效果)是最差的,即Error是最大的!

现在我们就来讨论一下这个Error来自什么地方?了解Error的来源之后就不会在Machine Learning实战中希望Improve Model Performance但是却毫无头绪了,你就可以挑选适当的方法来Improve Model。

假设样本特征向量为 x x ,标签值为 y ^ \hat{y} ,要拟合的目标函数为 f ^ ( x ) \hat{f}(x) ,而Model训练出来的函数为 f ( x ) f^*(x) ,我们知道, f ( x ) f^*(x) 并不会真的等于 f ^ ( x ) \hat{f}(x) ,因为我们不知道真的 f ^ ( x ) \hat{f}(x) 是什么样子。所以,可以把 f ( x ) f^*(x) 看作是 f ^ ( x ) \hat{f}(x) 的一个Estimator(估计量)。

其实,Error有两个来源:

  • bias(偏差)

    bias是模型本身导致的误差,即错误的模型假设所导致的误差,它是模型的预测值和真实值之间的差距。

  • variance(方差)

    variance是由于对训练样本集的小波动敏感而导致的误差,它可以理解为模型预测值的变化范围,即模型预测值的波动程度。

我们可以把训练最合适的Function看作是在打靶,靶心是 f ^ ( x ) \hat{f}(x) ,而 f ( x ) f^*(x) 就是子弹射中靶子上的一个位置, f ( x ) f^*(x) f ^ ( x ) \hat{f}(x) 之间有一段距离,则这一段距离可能来自于bias,也可能来自于variance。

Bias and Variance of Estimator

假设现在我们有m组n个样本点(前提是样本点是正确,噪音小甚至没有噪音),每训练一次模型,我们就用一组n个样本点,得到一个 f f^* 。这样下来,我们用同一个Model可以训练出m个不同的 f f^*

如下图,靶的中心是 f ^ \hat{f} ,而蓝点是打中靶子的m个子弹 f f^* ,我们的目标是打中靶心,但因为各种原因子弹偏离了靶心。

如果我们在这m个子弹的位置取一个中心 f ˉ \bar{f} ,那么这个中心 f ˉ \bar{f} 到靶的中心的距离就是我们所说的bias(偏差),而每个子弹 f f^* 对于这个中心 f ˉ \bar{f} 的偏离程度就是我们所说的variance(方差)

因此,我们在训练过程中会遇到四种不同的情况:

  • Low Bias and Low Variance(枪瞄准靶心而且枪是M4A1)

    最理想的状况,说明模型假设是对的,而且模型本身的输出值与期望值相差不大。

  • Low Bias and High Variance(枪瞄准靶心但是枪是AK47)

    说明模型假设是对的,但是模型本身的输出值与期望值相差很大。

  • High Bias and Low Variance(枪没瞄准靶心但是枪是M4A1)

    说明模型假设是错误的,但是模型本身的输出值与期望值相差不大。

  • High Bias and High Variance(枪没瞄准靶心而且枪是AK47)

    说明模型假设是错误的,而且模型本身的输出值与期望值相差很大。

温馨提示:M4A1后座力小,AK47后座力大。

Variance

如果我们用m组n个样本点的数据来训练模型,并把最终训练所得的m个Function绘制在同一张图上,那么我们可以通过观察这m个Function相互的偏离程度,从而定性观察variance的大小。通俗地说,就是我们只看所有子弹的分散程度而不关注靶心的位置。

可以看出:

  • 对于简单的Model,所有的Function是比较集中的,因此Variance是比较小的
  • 对于复杂的Model,所有的Function是比较分散的,因此Variance是比较大的

注意:越简单的Model越不容易受到数据的影响,所以得到的Function比较集中。比如我们取一个极端的例子,我们假设一个Model为 y = b y = b ,它的Variance就是0。

Bias

如果我们将最终训练所得的m个Function求平均得到一个 f f^* ,那么我们就可以用 f f^* 与实际的 f ^ \hat{f} 相似程度来表示bias。通俗地说,就是无论子弹多分散,我们只取所有子弹的中心点,并测算这个中心点离靶心的距离。

上图中,红线代表m个Function,黑线代表 f ^ \hat{f} ,蓝线代表 f f^*

可以发现,越复杂的Model,所有的Function越来越分散,但平均的 f f^* 与实际的 f ^ \hat{f} 是越来越接近的。

可能很多人会问,为什么模型越复杂, f f^* 与实际的 f ^ \hat{f} 是越来越接近呢?

注意:在[Machine Learning] 回归(Regression)中就有说过,Model其实就是Function Set,而训练的过程就是在Function Set中挑选最好的Function的过程,而且随着模型越来越复杂,我们的Function Set也会越来越大。因此随着Function Set会越来越大,那么Function Set就会有包含实际的 f ^ \hat{f} 的时候。通俗地说,随着模型的复杂度的提高,我们能射中的区域会越来越大,当能够射中的区域包含了靶心,那么即使子弹分散在靶心的周围,但所有子弹的中心却在靶心。

Bias v.s. Variance

如果模型过于简单,一般会有大的偏差和小的方差;反之如果模型复杂则会有大的方差但偏差很小。这是一对矛盾,因此我们需要在偏置和方差之间做一个折中。如果我一模型的复杂度作为横坐标,把方差和偏差的值作为纵坐标,可以得到下图所示的三条曲线(分别代表偏差、方差以及它们的折中)。

  • 如果你的Model不能很好的fit the Training Data,然后导致bias很大的话,就叫做Underfitting(欠拟合)
  • 如果你的Model可以fit the Training Data,但是Testing Data导致更大的Error,这就意味着你的Model可能是variance比较大,这就叫overfitting(过拟合)

What to do with large bias?

重新设计你的Model:

  • 选择更多的feature(特征)
  • 选择一个更复杂的Model

What to do with large variance?

  • More data(收集更多数据样本)

    优点:effective(非常有效)
    缺点:数据收集难

  • Regularization(正则化)

补充:Regularization(正则化)在[Machine Learning] 回归(Regression)中有具体解释。

以上便是本文全部内容,若有错误,欢迎大家留言指正!谢谢!

发布了5 篇原创文章 · 获赞 3 · 访问量 2617

猜你喜欢

转载自blog.csdn.net/Oh_MyBug/article/details/104282668