[关闭]
@dongxi 2017-07-28T15:00:58.000000Z 字数 4454 阅读 2159

局部加权线性回归

机器学习 CS229


       本文主要参考自加权最小二乘法与局部加权线性回归 ,对其中的内容进行了一致性的修改并且填补了没有说明的数学知识。

概述

       在之前的线性回归中,我们采用了不止一种方法(以后遇到有意思的方法还会加到其中),其中有一种方法是最小二乘回归,在统计学上,那篇文章中的最小二乘法回归称为普通最小二乘法(OLS),这是一种有约束条件的线性回归,本篇文章我们将通过介绍局部加权线性回归来讲这些内容都一并讲述一遍。

普通最小二乘法

       如同前面的文章一样,我们定义 为随机误差,那么我们可以得到:


       普通最小二乘法实际上就是使得残差平方和达到最小,即:

       很容易我们可以得到 的估计值为 ,那么在Gauss-Markov假设条件下,我们可以认为普通最小二乘法所求的线性回归就是最佳无偏估计。而Gauss-Markov假设条件则是以下三条:

       上式中, 表示的是协方差,三条公式的表达的意思分别是:

  1. 在给定 的条件下, 的条件期望为零,即:
  2. 在给定 的条件下, 的条件方差为一个常数 ,即:
  3. 特征 是非随机的,或者虽然 是随机但与 不相关,即:

       其实这里还有一些事情我们并没有注意到,在计算残差平方和的时候在本质上我们采用的并不是欧氏距离之差,而是马氏距离之差,只不过是因为欧氏距离是马氏距离的特殊情况(关于马氏距离的内容参见后续文章),所以才在 的推导公式中表现为欧氏距离,实际上 的推导公式应该如下:


       由于 是单位矩阵,所以公式就可以化简为前述形式。再说一些没有的,但是比较有意思的东西。
       我们将 的公式化简,那么会有:

       其中, ,这个矩阵 称为投影矩阵(关于投影矩阵请参见后续文章)。对于普通最小二乘法的内容基本就到这里了,这部分还有不少东西没有完全搞懂,等我有时间刷一下线代再来重修改下。

广义最小二乘法

       如果不能够满足高斯-马尔科夫假设,那么我们上述所有的推导很研究都是存在问题的。我们适当放宽假设条件,考虑这样一个模型:


       三个假设只是将其中的单位矩阵替换为一个已知的正定对称矩阵,这就是意味着 ,也就是不要求误差项之间保证不相关了。那么我们的残差平方和会变为:

       在这种情况下,我们的权重向量 的推导公式也发生了相应的改变:

加权最小二乘法

       加权最小二乘法则是广义最小二乘法的特殊情况,广义最小二乘法中的 太自由了,我们对其增加一些限制,我们认为它取对角矩阵,这个对角矩阵的对角元都是权重 的倒数,如下:


       很显然, 表示的就是第个样本在回归中的权重,具有较小方差的样本给予较大的权重,在回归问题中更加重视。我们用表示权重矩阵,那么 ,那么:

       我们可以通过一定的转换将上述模型转化成满足普通最小二乘假设的模型。在这里我们 平方根,我们可以很容易的得到这个矩阵:

       我们在回归矩阵两端都乘以矩阵 ,得到:

       此时,我们需要的事情发生了,这时 的协方差矩阵为:

       其中第一个等号是根据公式 推导的,证明过程参见Var(AX)=AVar(X)A如何推导的。到现在我们就得到了满足高斯马尔科夫假设的普通线性回归模型了。采用此模型推导出来的 值与原模型是完全相同的,而且我们可以认为普通最小二乘法所求的线性回归就是最佳无偏估计。

局部加权线性回归

       终于到我们的正题了,局部加权线性回归是一种经典的机器学习算法,在一定程度上解决了普通的线性回归方程所存在的欠拟合和过拟合的现象。与普通线性回归不同,普通线性回归是一种参数方法,在计算出 后,只要将新的数据带入即可进行预测,我们并不需要保留数据集。然而局部加权线性回归则是一种非参数方法,每次计算都需要重新学习一个参数 ,所以需要保留数据集。那么它是怎么运作的呢?
       实际上,局部加权线性回归其实就是把每个点根据与待测的距离,赋予一定的权重,也就是增加一个核函数矩阵 。那么我们需要最小化的目标函数大概为:


       而权重( )的估计项:

       很显然,这就是加权最小二乘法,我们前面讨论的东西终于用到了。Andrew Ng在Coursera中使用了高斯核函数,形式如下:

       需要注意的是,上式只是在形式上与高斯分布相似,但并不具有直接的联系,权重并不是一个随机变量。 被称为带宽,它控制着数据权重的下降速度。 越小,权重下降速度越快。

例子

       为了方便起见我们就采用比较简单的一元线性回归,其中 ,同时我们认为偏差服从高斯分布,那么我们可以根据以下代码生成一个简单的实例:

  1. from math import *
  2. import matplotlib as mpl
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import scipy.stats as stats
  6. mpl.style.use('ggplot')
  7. plt.figure(figsize=(12, 6))
  8. # x取值1~100 y表示非线性函数
  9. x = np.arange(1, 101)
  10. x = np.array([floor(i) for i in x])
  11. y = x + [10 * sin(0.3 * i) for i in x] + stats.norm.rvs(size=100, loc=0, scale=1.5)
  12. plt.scatter(x, y)
  13. plt.show()

       为了让大家能有一个对这个函数能有一个更清楚的认识,我们将图像绘制如下:
数据集散列点
       其实很明显,这是一个非线性关系(研究 是否是广义线性关系?)的样本数据,我们先采用普通最小二乘法来拟合这一问题:

  1. # 调用scipy.stats中自带的线性回归函数
  2. slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
  3. yHatLinear = intercept + slope * x
  4. plt.plot(x, yHatLinear, 'r', color='blue')

       我们可以预想到效果并不会很理想,事实也确实如此:
普通最小二乘法拟合直线
       而对于局部加权线性回归则不会出现这种现象,只要我们合理调节就可以得到较好的拟合(这一部分代码利用了加权最小二乘法向普通最小二乘法转换的小技巧,同时numpy、statsmodels这两个包我还不是特别熟练,所以只是理解了代码并未进行改写):

  1. def get_sqrtW(x0, k):
  2. w = np.zeros(len(x))
  3. for i in range(len(x)):
  4. w[i] = exp(-(x[i] - x0) ** 2 / (2 * k * k))
  5. w = np.array([sqrt(i) for i in w])
  6. return w
  7. def get_yHat2(k):
  8. yHat2 = np.zeros(len(x))
  9. for i in range(len(x)):
  10. w = get_sqrtW(x[i], k)
  11. x2 = w * x
  12. x2 = x2[x2 > 0]
  13. y2 = w * y
  14. y2 = y2[y2 > 0]
  15. X = np.zeros((1, len(x2)))
  16. X[0] = x2
  17. X = X.T
  18. X = sm.add_constant(X, has_constant='skip')
  19. X[:, 0] = w[w > 0]
  20. Y = y2
  21. model = sm.OLS(Y, X)
  22. results = model.fit()
  23. a = results.params[0]
  24. b = results.params[1]
  25. yHat2[i] = a + b * x[i]
  26. return yHat2
  27. yHat2 = get_yHat2(100000) # k取100000
  28. plt.figure(figsize=(12, 6))
  29. plt.plot(x, yHat2, 'r')
  30. plt.scatter(x, y)
  31. plt.show()

       当 分别为10000、10、1以及0.1时,拟合效果如下四图所示:
$\tau = 10000$
$\tau = 10$
$\tau = 1$
$\tau = 0.1$
       效果跟我们之前预料的完全相同,在 取值过小时,会发生过拟合现象,过大则会出现欠拟合。所以 的取值对我们的回归效果起到了决定性的作用。

结语

       这篇文章真的远远比我想象的费时间,因为前文中提到了博客将我的整个计划都打乱了,看了好多额外的内容,反复修改了三四次,尤其是在广义线性回归那部分真的研究了好久,最后还是通过阅读Wiki的内容基本完成了对这一部分的理解。总的来看,这篇文章不是很满意,等有时间一定要好好梳理下。

参考

Ordinary least squares
Residual sum of squares
加权最小二乘法与局部加权线性回归


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注