在上面介绍的和后续会介绍的所有模型中,都需要调整一个 平滑(smoothing) 或 复杂度(complexity) 参数的取值,这个参数可能是:
- 惩罚项的乘子;
- 核函数的宽度;
- 基函数的数量。
在平滑样条函数中,参数 $\lambda$ 可以将模型的形态在一条直线和一个插值函数之间调节。与之类似,一个局部 $m$ 阶多项式模型,在窗口为无限大时为全局 $m$ 阶多项式模型,在窗口大小近乎 0 时又变成了一个插值函数模型。这也意味着无法通过对样本的残差平方和最小化的方法来决定这些参数,因为这个方法必然会导致最终总会回到插值模型的方向,因为其没有残差(极度过拟合)。但这样的模型不太可能对新样本有预测能力。
可以用 k 最近邻的回归拟合 $\hat{f}(x_0)$ 来演示影响模型预测能力的几个因素。假设样本来自于生成模型 $Y=f(X)+\varepsilon$,$\operatorname{E}[\varepsilon]=0$,$\operatorname{Var}(\varepsilon)=\sigma^2$。简单起见,我们将样本中的输入变量 $x_i$ 看成非随机的确定值。则在 $x_0$ 点上的期望预测误差,或称为 测试(test) 或 泛化(generalization) 误差,可分解为:
$$\begin{align} \operatorname{EPE}_k(x_0) &= \operatorname{E}[(Y - \hat{f}_k(x_0))^2 | X=x_0] \\ &= \sigma^2 + [\operatorname{Bias}^2(\hat{f}_k(x_0)) + \operatorname{Var}_\mathcal{T}(\hat{f}_k(x_0))] \tag{2.46}\\ &=\sigma^2 + \left[ f(x_0) - \frac{1}{k} \sum_{\ell=1}^k f(x_{(\ell)}) \right]^2 + \frac{\sigma^2}{k} \tag{2.47} \end{align}$$加括号的下脚标 $(\ell)$ 表示 $x_0$ 点的 $k$ 个最近邻域点。
分解式中有三项。第一项 $\sigma^2$ 为 不可约(irreducible) 误差,即新样本本身的方差,即便我们知道 $f(x_0)$ 的真实值也是无法避免这个扰动的。
第二项和第三项,分别为误差项和方差项,是可以通过算法控制的,组成了对 $f(x_0)$ 的估计值 $\hat{f}_k(x_0)$ 的均方误差 MSE。偏差项为真实均值 $f(x_0)$ 与 估计值的期望之间的差的平方,$[\operatorname{E}_\mathcal{T}(\hat{f}_k(x_0))-f(x_0)]^2$,这里的期望是针对训练样本本身的随机性。如果真实的函数比较光滑,这项很可能会随着 $k$ 增大而增加。当 $k$ 比较小时,在估计中只选取了距离 $f(x_0)$ 最近的几个邻近点 $f(x_{(\ell)})$,因此它们的平均值会与真实值 $f(x_0)$ 很接近。随着 $k$ 的增大,选取的邻域也随之扩大,则平均值也可能远离真实值。
第三项是一个平均值的方差,所以会随着被平均的点的数量 $k$ 增加而降低。因此随着 $k$ 的变化,存在此消彼长的 偏差方差权衡(bias-variance tradeoff)。
一般来说,随着算法的模型复杂度增加,方差趋向于增加而平方偏差趋向于减少。当模型复杂度降低时则反之。在 k 最近邻模型中,参数 $k$ 控制着模型的复杂度。
通常通过模型复杂度的选择来权衡偏差和误差项,使得模型的测试误差最小。一个简单的测试误差的估计方法为使用训练样本误差 $\frac{1}{N}\sum_i(y_i-\hat{y}_i)^2$。但训练样本误差并不是测试误差的一个合适的估计量,因为它无法正确的反应模型复杂度1。
图 2.11 演示了模型复杂度与训练误差和测试误差之间的典型关系。当模型复杂度增加,训练误差总是趋向于降低。模型复杂度的增加,意味着模型更贴近于训练样本,如果过于强调与训练样本的拟合,模型会不顾其他而只为拟合到训练样本上,通常这种模型泛化能力差(即产生大测试误差)。这时预测 $\hat{f}(x_0)$ 的方差大,即等式 2.46 中的第三项。反之,如果模型不够复杂,则其与训练样本欠拟合,可能造成大偏差,同样会导致泛化能力差。第七章会讨论预测模型的测试误差的估计方法,以此来为某个预测方法和训练集寻找最优的模型复杂度。
-
可以理解为这个样本不应该“又当运动员又当裁判员”。另一个例子是在 OLS 中,加入一个新变量总会让 R 平方增加。 ↩︎