偏差-方差分解

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

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

定义

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

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

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

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

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

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

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

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

推导

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

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

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

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

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

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

至此,分解结束。

参考文献

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

上一篇:Pycharm,Python 安装OpenCV and CV2 时,报错,教你如何正确安装。


下一篇:EdX Columbia ML 7. K-最近邻分类与贝叶斯分类器