zoukankan      html  css  js  c++  java
  • 偏差-方差分解

    当训练得到一个模型(f)时,我们希望(f)的泛化能力足够强,这样也代表它对于新的样本有比较好的预测能力。我们会通过实验检验(f)的泛化误差,那它的泛化误差到底是由哪几部分贡献?

    这里先给出结论:噪声、偏差与方差。

    定义

    训练模型的前提是我们能拿到一个数据集(D),它其中包含多个样本,来自同一个分布。但是(D)不可能包含这个分布上的所有样本,也就是说(D)本身是总体的一个子集。

    在总体中取相同数量的样本组成不同的(D_i),用同一个算法训练得到的模型也会不同。所以训练得到的模型针对某一个样本(x)的预测值有一个期望的概念。即:
    [
    egin{equation}
    overline{f}(oldsymbol{x})=mathbb{E}_{D}[f(oldsymbol{x} ; D)]
    end{equation}
    ]

    这里(D)是来自同一个分布样本数量相同的不同训练集,它是一个变量的概念。不同的(D_i)训练得到不同的模型(f_i)。使用它们预测(x),再对预测的值取期望就是(1)式的含义。(overline{f}(oldsymbol{x}))是模型对样本(x)预测的期望值。

    所以也就有一个方差的概念,即不同模型(f_i)对于(x)的预测值的波动情况。如果是回归任务的话,那么预测值的方差可以表示为:
    [
    egin{equation}
    operatorname{var}(oldsymbol{x})=mathbb{E}_{D}left[(f(oldsymbol{x} ; D)-overline{f}(oldsymbol{x}))^{2} ight]
    end{equation}
    ]

    (2)式是方差的定义。下面看一下噪声,怎么理解噪声?

    可能出现噪声的场景,还是以回归任务为例。样本(x)对应的(y)在输入的输出错了,多加了30上去。那么多出来的30就是噪声。噪声是Irreducible error,它难以依靠模型优化消除。
    [
    egin{equation}
    varepsilon^{2}=mathbb{E}_{D}left[left(y_{D}-y ight)^{2} ight]
    end{equation}
    ]

    上述是噪声的方差定义,(y)是样本的真实标签,(y_D)是样本在不同(D_i)中的标签。比如在得到(D_1)这个数据集时,往其中加入((x, y))这个样本,将标签(y)误输为(y+30),此时便产生了噪声。为了方便计算,我们假设噪声期望为0,即:
    [
    egin{equation}
    mathbb{E}_{D}left[y_{D}-y ight]=0
    end{equation}
    ]

    最后定义偏差,预测值的期望(overline{f}(oldsymbol{x}))与真实标签(y)之差,偏差的平方如下:
    [
    egin{equation}
    operatorname{bias}^{2}(oldsymbol{x})=(overline{f}(oldsymbol{x})-y)^{2}
    end{equation}
    ]

    推导

    经过上面一番定义,有了许多和噪声、方差、偏差相关的量。下面开始推导,对于样本(x)的预测误差的期望可以写为:
    [
    egin{equation}
    Expected prediction error at x = mathbb{E}_{D}left[left(f(oldsymbol{x} ; D)-y_{D} ight)^{2} ight]
    end{equation}
    ]

    为了简便,作一些缩写,记:
    [
    f(oldsymbol{x} ; D) ightarrow f \
    y_{true} ightarrow y \
    overline{f}(x) ightarrow overline{f}
    ]

    第一次分解,引入真实标签(y),

    (
    原式=mathbb{E}_{D}left[left(f-y_{D} ight)^{2} ight] \
    =mathbb{E}_{D}left[left(f-y+y-y_{D} ight)^{2} ight] \
    =mathbb{E}_{D}left[left(f-y ight)^{2}+left(y-y_{D} ight)^{2}+2left(f-y ight)left(y-y_{D} ight) ight] \
    =mathbb{E}_{D}left[left(f-y ight)^{2} ight]+mathbb{E}_{D}left[left(y-y_{D} ight)^{2} ight]+mathbb{E}_{D}left[2left(f-y ight)left(y-y_{D} ight) ight] \
    =mathbb{E}_{D}left[left(f-y ight)^{2} ight]+varepsilon^{2}+0
    )

    接下来对第一项进行分解,引入(overline{f}),将其分解为方差与偏差的组合:

    (
    原式=mathbb{E}_{D}left[left(f-y ight)^{2} ight] \
    =mathbb{E}_{D}left[left(f-overline{f}+overline{f}-y ight)^{2} ight] \
    =mathbb{E}_{D}left[left(f-overline{f} ight)^{2}+left(overline{f}-y ight)^{2}+2left(f-overline{f} ight)left(overline{f}-y ight) ight] \
    =mathbb{E}_{D}left[left(f-overline{f} ight)^{2} ight]+mathbb{E}_{D}left[left(overline{f}-y ight)^{2} ight]+mathbb{E}_{D}left[2left(f-overline{f} ight)left(overline{f}-y ight) ight] \
    =operatorname{var}(oldsymbol{x})+left(overline{f}-y ight)^{2}+2left(overline{f}-y ight)mathbb{E}_{D}left(f-overline{f} ight)
    \
    =operatorname{var}(oldsymbol{x})+operatorname{bias}^{2}(oldsymbol{x})+2left(overline{f}-y ight)left(mathbb{E}_{D}left(f ight)-overline{f} ight)
    \
    =operatorname{var}(oldsymbol{x})+operatorname{bias}^{2}(oldsymbol{x})
    )

    至此,分解结束。

    参考文献

    [1]《机器学习》. 周志华
    [2]《神经网络与深度学习》. 邱锡鹏
    [3] 华盛顿大学机器学习课程Regression,week3.《Formally defining the 3 sources of error》

  • 相关阅读:
    最小的K个数
    数组中出现次数超过一半的数字
    合并排序
    一只小蜜蜂...
    从零开始学springboot笔记(三)-Spring boot之热部署之Springloaded(仅做了解,实际开发中不用它)
    从零开始学springboot笔记(二)-Spring boot返回json数据(中文无乱码)
    从零开始学springboot笔记(一)-Spring boot之Hello Word
    IDEA2018永久破解版下载与安装
    $.ajaxSettings.async = false;是什么意思?
    嘿嘿
  • 原文地址:https://www.cnblogs.com/shayue/p/pian-chafang-cha-fen-jie.html
Copyright © 2011-2022 走看看