#!/usr/bin/env python # coding: utf-8 # # 3.2 Bias-Variance 分解 # 如果我们假定基函数的形式和数目都是确定的时候,我们知道,最小二乘回归,或者极大似然方法,在模型过于复杂的时候可能会带来严重的过拟合问题,而限制基函数的数目防止过拟合又限制了模型的拟合能力。虽然我们可以通过加入正则项的方法解决问题,但是这又引申出如何选择合适的正则系数 $\lambda$ 的问题。显然,我们不可能同时优化 $\mathbf w,\lambda$ 来最小化损失函数,因为这样很明显会得到非正则化的解 $\lambda=0$。 # # 为了防止极大似然的过拟合问题,我们从贝叶斯理论的角度来考虑这个问题。在考虑这个问题之前,我们需要了解一个在统计观点中重要的模型复杂度问题,偏差-方差权衡问题(`bias-variance trade-off`)。 # # 在 [1.5.5](../Chap-01-Introduction/01-05-Decision-Theory.ipynb#1.5.5-回归问题的损失函数) 节,我们讨论了在给定条件分布 $p(t|\mathbf x)$ 的情况下,不同损失函数下的最优解。我们知道,对于平方损失函数,最优的预测解 $h(\mathbf x)$ 为条件期望: # # $$ # h(\mathbf x)=\mathbb E[t|\mathbf x] = \int tp(t|\mathbf x)dt # $$ # # 在 [1.5.5](../Chap-01-Introduction/01-05-Decision-Theory.ipynb#1.5.5-回归问题的损失函数) 节,我们知道,平方损失可以写成: # # $$ # \mathbb E[L]=\int\{y(\mathbf x)-h(\mathbf x)\}^2 p(\mathbf x) d\mathbf x + \int\{h(\mathbf x)-t\}^2 p(\mathbf x,t) d\mathbf xdt # $$ # # 第二部分是与 $y(\mathbf x)$ 独立的部分,是当 $y(\mathbf x) = h(\mathbf x)$ 时,我们能达到的最小损失,对应于数据本身的噪声部分。 # ### 偏差和方差 # 如果我们有足够多的数据,我们就能很好的模拟出 $h(\mathbf x)$,从而得到最优的 $y(\mathbf x)=h(\mathbf x)$;但是现实情况下,我们的数据点是有限的,因此事实上,我们并不知道 $h(\mathbf x)$ 的精确值。 # # 为了对 $h(x)$ 进行建模,我们考虑使用 $y(\mathbf{x,w})$ 的模型,其中 $\mathbf w$ 是参数向量。进行参数估计时,贝叶斯学派的观点是我们首先对参数 $\mathbf w$ 的先验分布进行建模;统计学派的观点是我们使用一组数据集 $\mathcal D$ 对 $\mathbf w$ 进行估计。 # # 假设我们从分布 $p(t,\mathbf x)$ 取出一组大小为 $N$ 的数据集 $\mathcal D$;对于任何一个数据集 $\mathcal D$,我们可以得到一个预测函数 $y(\mathbf x,\mathcal D)$。系综(`ensemble`)中的不同数据集会给出不同的预测函数,从而得到不同的平方损失函数。因此,对于一个特定的算法,其性能由这个系综的平均性能决定。 # # 现在考虑平方损失函数的第一部分: # # $$ # \{y(\mathbf x;\mathcal D)-h(\mathbf x)\}^2 # $$ # # 这个部分会依赖于特定数据集 $\mathcal D$ 的选择,因此我们需要将其对 $\mathbf D$ 做一个期望。我们考虑将它拆分为两部分: # # $$ # \begin{aligned} # & \{y(\mathbf x;\mathcal D)-\mathbb E_D[y(\mathbf x;\mathcal D)]+\mathbb E_D[y(\mathbf x;\mathcal D)]-h(\mathbf x)\}^2 \\ # = & \{y(\mathbf x;\mathcal D)-\mathbb E_D[y(\mathbf x;\mathcal D)]\}^2 + \{\mathbb E_D[y(\mathbf x;\mathcal D)]-h(\mathbf x)\}^2 \\ # & + 2\{y(\mathbf x;\mathcal D)-\mathbb E_D[y(\mathbf x;\mathcal D)]\}\{\mathbb E_D[y(\mathbf x;\mathcal D)]-h(\mathbf x)\}\\ # \end{aligned} # $$ # # 并对 $\mathcal D$ 求期望(最后一项会消掉): # # $$ # \begin{aligned} # & \mathbb E_D\left[\{y(\mathbf x;\mathcal D)-h(\mathbf x)\}^2\right] \\ # = & \underbrace{\left\{\mathbb E_D[y(\mathbf x;\mathcal D)]-h(\mathbf x)\right\}^2}_\color{blue}{(\text{bias})^2} + # \underbrace{\mathbb E_D\left[\{y(\mathbf x;\mathcal D)-\mathbb E_D[y(\mathbf x;\mathcal D)]\}^2\right]}_\color{red}{\text{variance}} # \end{aligned} # $$ # # 我们看到,$y(\mathbf x;\mathcal D)$ 与 $h(\mathbf x)$ 的平方误差期望可以表示为两个部分,第一部分叫偏差(`bias`)的平方,表示在不同数据集上的期望与回归函数之间的误差,第二部分叫方差(`variance`),衡量的是这个特定数据集的 $y(\mathbf x;\mathcal D)$ 对回归函数的敏感程度。 # # 如果我们回到平方损失函数,我们得到: # # $$ # \mathbb E[L] = \rm expected~loss = (bias)^2 + variance + noise # $$ # # 其中 # # $$ # \begin{aligned} # {\rm (bias)^2} & = \int \left\{\mathbb E_D[y(\mathbf x;\mathcal D)]-h(\mathbf x)\right\}^2 p(\mathbf x)d\mathbf x \\ # {\rm variance} & = \int \mathbb E_D\left[\{y(\mathbf x;\mathcal D)-\mathbb E_D[y(\mathbf x;\mathcal D)]\}^2\right] p(\mathbf x)d\mathbf x \\ # {\rm noise} & = \int\{h(\mathbf x)-t\}^2 p(\mathbf x,t) d\mathbf xdt # \end{aligned} # $$ # # 这里偏差和方差项是在平均意义下的结果。 # ### 偏差方差权衡 # 最小化 $\mathbb E[L]$ 对应与最小化这三项的和,偏差的平方,方差,和常数噪声项。 # # 高自由度的模型(低 $\lambda$)通常是低偏差、高方差,而低自由度(高 $\lambda$)的模型则对应于高偏差,低偏差的。一个好的模型需要权衡两者之间的平衡。 # # 虽然偏差-方差分解提供了一种从统计上理解模型复杂度的方法,但是从实际角度来说,我们通常只有一组观测数据,因此对一组系综的数据集进行均值操作是不现实的。