这节我们主要学习

  • 误差的来源
  • 偏差
  • 方差
  • 过拟合、欠拟合与误差的关系
  • 交叉验证

1. 误差的来源

通过上一节课的学习,我们知道:

  • 选择不同的函数集就是选择不同的模型,在训练集和测试集上得到不同的误差 (error)。
  • 越复杂的模型不一定误差最小。

那么我们现在讨论误差的来源:

  • bias 偏差
  • variance 方差

如果知道误差的来源,就可以采用适当的方法来优化模型。

2. 误差来源的实例分析

上一节课中,我们需要估测宝可梦进化后CP值。

我们需要找到一个函数,能够准确预测每一个宝可梦进化后的 CP 值。

理论上,有一个最佳的函数,我们记作:$\widehat{y}=\widehat{f}(宝可梦)$

实际上我们是不知道最佳模型的。

我们根据训练集数据找到最好的模型,记作:$f^*$($f^*$ 是 $\widehat{f}$ 的估测值)

它们俩之间的距离大小来自 2 个方面:可能来源于偏差,也可能来源于方差。

那么一个评价模型的偏差和方差指的是什么呢?

3. 理解方差和偏差

  • 估计变量 $X$ 的期望

    • 假设 $x$ 的平均值是 $\mu$
    • 假设 $x$ 的方差是 $\sigma^2$
  • 均值 $\mu$ 的估计量

    • 简单取样 $N$ 个样本点:{$x^1,x^2,…,x^N$}
    • 计算 $N$ 个点的平均值和方差 $s^2$:

    $m={\frac{1}{N}\sum_n{x^n}}$

    $s^2 = \frac{1}{N}\sum_{n}(x^n-m)^2$

    • 将以上试验多次,然后计算 $m$ 的平均值:

    $E[m] = E[\frac{1}{N}\sum_n{x^n}]=\frac{1}{N}\sum_{n}{E[x^n]}=\mu$

    $Var[m]=\frac{\sigma^2}{N}$

    偏差估计值:

    $E[s^2]=\frac{N-1}{N}\sigma^2 \neq \sigma^2$

    m 分散在 $\mu$ 周围,分散的情形取决于 m 的方差,而方差的大小取决于 $N$。

【注意】:视频中的 Larger N 和 Smaller N 放反了。

4. 方差和偏差的几种情况

我们要估测的是靶的中心,这个是我们的目标。

通过许多次试验,我们发现你其中一个射中的位置,记作 $f^*$,

它与靶心中心 $\widehat{f}$ 之间的距离,其实是发生了两件事,即等价于他们之间的误差取决于两件事:

  • 第一件事情就是:你瞄准的位置在哪里?

    换句话说就是你瞄准位置的期望与靶心之间的偏差,计算如下:

    $f^* $ 的平均值:$E[f^*]=\overline{f} $,

    即:你没有瞄准靶心,你以为你瞄准的靶心与实际的靶心是有偏差 (bias)

  • 第二件事情就是:

    你瞄准的靶心 $E[f^*]=\overline{f}$ 与射中的位置 $f^*$ 是有偏移的。

    所以每次的 $f^*$ 是不一样的,

    而每一次的 $f^*$ 与 $E[f^*]=\overline{f}$ 之间的距离就是方差 (variance)

所以误差大小取决于偏置和方差的大小。

我们期待的是没有偏差(Low Bias),而且方差较小(Low Variance)。

但是有时我们得到的有时方差很小,但是偏离靶心比较远,此时是 High Bias 和 Low Variance,

又或者我们得到是目标是分散在靶心周围,这样也会得到一些误差。

多次试验宝可梦模型理解方差和偏差

在不同的平行宇宙抓到 10 只宝可梦来计算不同的 $f^*$,

在不同的宇宙中抓到的宝可梦是不一样的:

  • 第一个宇宙中的我,抓到 10 只宝可梦;

  • 第二个宇宙中的我(衣服颜色与第一个不同),抓到另外 10 只宝可梦;

  • 第三个宇宙中的我(性别已经换掉),抓到的是其他 10 只宝可梦;

每一次抓到的宝可梦是不一样的。

如果你拿不同的宝可梦来找到你最好的 function,就算你用同一个模型,得到的结果也会不同。

假设我们现在都用 $y=b+w \cdot x_{cp}$ 这个模型,

但是你给他输入的 data 不一样,最后得到的 $f^*$ 就不一样。

我们在 100 个平行宇宙中分别抓取 10 个宝可梦,每个平行宇宙中都用 $y=b+w \cdot x_{cp}$ 模型,

可以得到不同的 $f^*$ 的分布情况,然后将得到 100 个不同 $w$ 和 $b$,将每一条直线都绘制出来,最后得到的结果如图:

如果采用不同的 model 呢?

  • 方差

如果全部采用直线模型,得到的方差就比较小。

如果用比较复杂的模型,误差点散的比较开,方差就比较大,而且各种曲线长得都不像。

  • 偏差

偏差:我们有很多 $f^*$,找到它们的期望值 $E[f^*]=\overline{f}$,描述 $\overline{f}$ 与 $\widehat{f}$ 接近程度。

如果偏差比较大,说明 $\overline{f}$ 与靶心 $\widehat{f}$ 距离较大;

如果偏差比较小,说明 $\overline{f}$ 与靶心 $\widehat{f}$ 距离较小;

实际测量时,无法清晰的获取 $\widehat{f}$ 的位置,故假设一条曲线作为 $\widehat{f}$,

宝可梦依次 $\widehat{f}$ 曲线上取样 10 个点,然后求取 $\overline{f}$。

试验结果:

  • 黑色曲线:真实的靶心位置 $\widehat{f}$

  • 红色部分:表示我们做 5000 次试验得到的 $f^*$

  • 蓝色曲线:表示 5000 次试验 $f^*$ 的平均值 $\overline{f}$

然后分别用三次式和五次式进行试验,发现五次式中每一个差距很大,但是平均后的蓝线和实际中心黑线很接近。

总结:

  • 简单模型得到的偏差比较大,方差较小。

  • 复杂模型得到的偏差比较小,方差较大。

5. 欠拟合和过拟合与误差之间的关系

  • 如何知道遇到的问题是偏差较大还是方差较大呢?

如果模型不能够拟合训练集,则是偏差比较大,此时是欠拟合

如果模型能够很好的拟合数据,但是在测试集上有较大的误差,此时模型可能有较大的方差,此时是过拟合

  • 欠拟合解决方式:
    • 添加更多的特征
    • 选择更复杂的模型
  • 过拟合解决方式:
    • 增加数据(非常有效但有点不实际)
    • 正则化
  • 模型选择注意事项:
    • 在方差和偏差之间找到平衡
    • 选择一个能够使得偏差和方差综合误差最小的模型
    • 不能够做的:

不能够根据 private testing set 的误差来选择模型,要考虑 public testing set,故可以采用交叉验证来解决这个问题。

6. 交叉验证

一般数据集分为训练集和测试集,将训练集分为训练集和验证集,然后根据验证集上的误差选择模型,

从而来得到测试集上的误差。

一般测试集上的误差大于验证集上的误差。

不要因为测试上的误差大于验证集上的误差而在模型上做工作,此时相当于把测试集上的偏差考虑进去。

  • n-折交叉验证

图示是 3-折交叉验证,即将训练集分成 3 份,每一次拿其中 1 份作为验证集,另外 2 份作为训练集。

然后每一次分别得到模型的误差,每一个模型对应的训练 3 次,然后得到每一个模型的平均误差。

选择平均误差最小的那个模型即可,然后将选择的模型在训练集上跑一遍后在测试集上使用。