在第二章中,简单介绍了 k 最近邻的平均作为回归函数 $\operatorname{E}(Y|X=x)$ 的估计:
$$\hat{f}(x) = \operatorname{Ave}(y_i|x_i \in N_k(x)) \tag{6.1}$$其中的 $N_k(x)$ 为与 $x$ 的平方距离最近的 $k$ 个点的集合,“Ave” 代表了平均数(均值)的计算。其基本思路是放宽条件期望的定义,计算目标点邻域上的平均,如图 6.1 的左边所示。
在此例中使用了 30 个近邻点,即在 $x_0$ 的拟合值为输入变量点 $x_i$ 与 $x_0$ 最接近的 30 个样本的输出变量的平均。如此在不同的 $x_0$ 点处拟合,则可描出绿色的曲线。由于 $\hat{f}(x)$ 对 $x$ 不连续,绿色曲线比较崎岖。将 $x_0$ 点从左向右移动,它的 $k$ 个近邻点会先保持不变,直到移动使得右侧的一个点 $x_i$ 开始比 $k$ 个近邻点中最左侧的点 $x’_i$ 更接近于 $x_0$ 点,则 $x_i$ 代替 $x’_i$ 成为 $x_0$ 的近邻点。如此产生的近邻平均是离散的,从而得到一个不连续的 $\hat{f}(x)$。
这种不连续性不美观也不必要。与其给邻域中的所有点赋予相同的权重,可以使权重随着点与目标点距离的增加而平滑地衰减至零。图 6.1 的右边展示了用 Nadaraya-Watson 加权平均的一个例子:
$$\hat{f}(x_0) = \frac {\sum_{i=1}^N K_\lambda(x_0, x_i) y_i} {\sum_{i=1}^N K_\lambda(x_0, x_i)} \tag{6.2}$$其中 Epanechnikov 二次核函数为:
$$K_\lambda(x_0, x) = D \left ( \frac{\|x-x_0\|}{\lambda} \right ) \tag{6.3}$$其中
$$D(t) = \begin{cases} \frac{3}{4}(1-t^2) & \text{如果 } |t| \leq 1 \\ 0 & \text{其他} \end{cases}\tag{6.4}$$图 6.1 右边可见拟合函数是连续的并且非常平滑。当目标点从左向右移动,新的近邻点在刚进入邻域时的权重为零,然后再缓慢地增加(练习 6.1)。
在上面的例子中核函数拟合使用的是距离的窗宽(window size)$\lambda = 0.2$,其不随着 $x_0$ 的移动而改变。而 30 近邻平滑的窗宽是会根据 $x_0$ 点处的局部样本密度而自适应的。在核函数方法中也可以使用自适应的邻域。更普遍地,定义 $h_\lambda(x_0)$ 为决定 $x_0$ 点处的邻域宽度的函数(由 $\lambda$ 索引)。则可定义核函数:
$$K_\lambda(x_0, x) = D \left ( \frac{|x-x_0|}{h_\lambda(x_0)} \right ) \tag{6.5}$$在式 6.3 中,$h_\lambda(x_0)=\lambda$ 为常数。在 k 最近邻中,用 $k$ 而不是 $\lambda$ 定义了领域大小,也可写为 $h_k(x_0)=|x_0-x_{[k]}|$,其中 $x_{[k]}$ 为距离 $x_0$ 第 k 近的点 $x_i$。
在实际操作中,需要注意几个细节:
- 需要确定平滑参数 $\lambda$,从而确定局部邻域的宽度。较大的 $\lambda$ 会产生较小的方差(用更多的样本计算平均数),但会有较大的偏差(因为隐含的假设是真实函数在邻域上是个常数)。
- 距离的窗宽($h_\lambda(x)$ 为常数)趋向于保持估计值的偏差为常数,但方差与局部样本密度成反比。最近邻域的窗宽与之相反,其方差保持为常数,而偏差绝对值与局部样本密度成反比。
- 在最近邻域中需要处理在 $x_i$ 值上有多个样本点的情况。多于大多数平滑方法,可以简单地将输入变量相同的多个样本点缩减为一个平均样本,然后将新的样本附加上权重 $w_i$(用来与核函数权重相乘)。
- 这就引入了另一个更一般性的问题:样本权重 $w_i$。在计算加权平均的实际操作中,简单地将样本权重与核函数权重相乘。在最近邻域中,现可自然地限制邻域中的样本权重总和($\sum w_i$)为 $k$。在出现权重溢出的情况时(即当邻域中边界点的权重 $w_j$ 会使权重总和大于 $k$),可只纳入这个样本点的一部分。
- 在边界会存在问题。在边界附近,距离定义的邻域趋向于包含更少的点,而最近邻域趋向于变得更大。
- Epanechnikov 核函数的支撑集1(support)是紧致的(compact)2,这对最近邻域的窗宽是必要的条件。另一个常用的紧致的核函数基于三次函数: $$D(t) = \begin{cases} (1-\|t\|^3)^3 & \text{如果 } |t| \leq 1 \\ 0 & \text{其他} \end{cases}\tag{6.4}$$ 这个函数在顶端比较平(类似于最近邻域的等权重)并且在其支撑集的边界是可微的。高斯密度函数 $D(t)=\phi(t)$ 是一个常见的非紧致核函数,其标准差控制着窗宽大小。图 6.2 中对比了三个核函数。
6.1.1 局部线性回归
上述中从基础的移动平均(最近邻域)进展到利用核函数的平滑变动的加权平均。但如图 6.3 的左边所示,平滑的核函数拟合仍存在问题。在定义域的边界处,由于核函数的不对称性,局部加权平均可能偏差很大。在局部用线性拟合代替常数,可以确切地去除一阶的偏差,如图 6.3 的右边所示。如果 $X$ 的值在样本中不是均匀地分布的(与边界类似,但通常不会那么严重),这种偏差在定义域的内部也可能出现。局部的加权线性回归同样会对其进行一阶上的修正。
在每个目标点 $x_0$ 处,局部加权回归分别求解一个加权最小二乘问题:
$$\min_{\alpha(x_0), \beta(x_0)} \sum_{i=1}^N K_\lambda(x_0, x_i)[y_i - \alpha(x_0) - \beta(x_0)x_i]^2 \tag{6.7}$$则估计值为 $\hat{f}(x_0)=\hat{\alpha}(x_0)+\hat{\beta}(x_0)x_0$。注意尽管这里用局部数据拟合了一个完整的线性模型,但其目的只是为了得到在一个点 $x_0$ 处的拟合值。
定义一个取值为向量的函数 $b(x)^T=(1,x)$;$B$ 为 $N\times2$ 的回归矩阵,第 i 行为 $b(x_i)^T$;$W(x_0)$ 为 $N\times N$ 的对角矩阵,第 i 个对角线元素为 $K_\lambda(x_0,x_i)$。
$$\begin{align} \hat{f}(x_0) &= b(x_0)^T(\mathbf{B}^T\mathbf{W}(x_0)\mathbf{B})^{-1} \mathbf{B}^T\mathbf{W}(x_0)\mathbf{y} \tag{6.8} \\ &= \sum_{i=1}^N l_i(x_0) y_i \tag{6.9} \end{align}$$式 6.8 是一个局部线性回归估计的显式表达式;式 6.9 强调了一个性质,即其估计对 $y_i$ 是线性的($l_i(x_0)$ 中没有 $y$)。这里的权重 $l_i(x_0)$ 结合了核函数权重 $K_\lambda(x_0,\cdot)$ 和最小二乘操作,又是也被称为 等价核(equivalent kernel)。
图 6.4 演示了局部线性回归对等价核的作用。历史上是通过修改核函数来修正 Nadaraya-Watson 和其他局部平均核函数方法中的偏差。基于渐进均方差的理论做出的这种修正,不仅难以实施,并且在有限样本上只是一个近似。局部线性回归自动地调整核权重以恰好修正一阶的偏差,这种性质也被称为 核函数木工(kernel carpentry)。利用局部回归的线性性质和真实函数 $f$ 在 $x_0$ 附近的展开,对 $\operatorname{E}\hat{f}(x_0)$ 进行如下的展开,
$$\begin{align} \operatorname{E}\hat{f}(x_0) =& \sum_{i=1}^N l_i(x_0) f(x_i) \\ =& f(x_0) \sum_{i=1}^N l_i(x_0) + f'(x_0) \sum_{i=1}^N (x_i-x_0) l_i(x_0) + \\ & \frac{f''(x_0)}{2}\sum_{i=1}^N(x_i-x_0)^2 l_i(x_0)+ R \tag{6.10}\end{align}$$其中的余项 $R$ 包含了三阶以及更高阶的 $f$ 导数,在适当的平滑性假设下通常比较小。可证明(练习 6.2)在局部线性回归中,$\sum_{i=1}^Nl_i(x_0)=1$,并且 $\sum_{i=1}^N(x_i-x_0)l_i(x_0)=0$。因此,上式中的前两项和等于 $f(x_0)$,而偏差 $\operatorname{E}\hat{f}(x_0)-f(x_0)$ 只依赖于二次和更高次幂的 $f$ 拓展项。
6.1.2 局部多项式回归
那么没有理由止于局部线性拟合,可以在局部进行任意级数 $d$ 的拟合:
$$\min_{\substack{{\alpha(x_0), \beta_j(x_0)}\\{j=1,\dots,d}}} \sum_{i=1}^N K_\lambda(x_0, x_i) \left [ y_i - \alpha(x_0) - \sum_{j=1}^d \beta_j(x_0)x_i^j \right]^2 \tag{6.11}$$其估计值为 $\hat{f}(x_0)=\hat{\alpha}(x_0)+\sum_{j=1}^d\hat{\beta}_j(x_0)x_0$。利用类似于等式 6.10 的展开可证明其偏差只包含 $d+1$ 以上级数的成分(练习 6.2)。图 6.5 演示了局部二次回归。局部线性回归在真实函数弯曲的区间上易出现偏差,这种现象也被称为 削峰填谷(trimming the hills and filling the valleys)。局部二次回归通常可以修正这种偏差。
伴随着消除偏差的代价,是方差的增加。图 6.5 中右边的拟合曲线,尤其在尾部,略微更加扭动。假设模型为 $y_i=f(x_i)+\varepsilon_i$;其中 $\varepsilon_i$ 为独立同分布,期望为零方差为 $\sigma^2$。则 $\operatorname{Var}(\hat{f}(x_0))=\sigma^2\|l(x_0)\|^2$,其中 $\|l(x_0)\|$ 为 $x_0$ 处的等价核权重向量。可证明(练习 6.3)$\|l(x_0)\|$ 随着 $d$ 增加,所以在选择多项式级数时面临着偏差方差权衡。图 6.6 展示了零阶、一阶和二阶的局部多项式的方差曲线。
关于这个问题的一些经验总结如下:
- 局部线性拟合可以很大程度地减少边界附近的偏差,而方差的增加不太大。局部二次拟合在边界附近的偏差修正有限,但方差的增加较大。
- 局部二次拟合在降低定义域内部的弯曲区间上的偏差更有效。
- 渐进分析表明奇数级数的局部多项式回归优于偶数级数。这很大程度上是由于边界效应在渐进中主宰了均方差(MSE)。
一个可能的改进是在边界区域使用局部线性拟合而在内部使用局部二次拟合,但我们并不推荐这种做法。通常应让具体应用场景来决定拟合的阶数。例如,如果实际应用中更关心外插(预测)的效果,则边界区域更重要,因此局部线性拟合可能会更可靠。
本节练习
练习 6.1
Show that the Nadaraya–Watson kernel smooth with fixed metric bandwidth λ and a Gaussian kernel is differentiable. What can be said for the Epanechnikov kernel? What can be said for the Epanechnikov kernel with adaptive nearest-neighbor bandwidth λ(x0 )?
练习 6.2
Show that $\sum_{i=1}^N(x_i-x_0)l_i(x_0)=0$ for local linear regression. Define $b_j(x_0)=\sum_{i=1}^N(x_i-x_0)^jl_i(x_0)$. Show that $b_0(x_0)=1$ for local polynomial regression of any degree (including local constants). Show that $b_j(x_0)=0$ for all $j\in\{1,2,\dots,k\}$ for local polynomial regression of degree k. What are the implications of this on the bias?
练习 6.3
Show that ||l(x)|| (Section 6.1.2) increases with the degree of the local polynomial