- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
线性回归的一个问题是有可能出现欠拟合现象,因为它求的是具有最小均方误差的无偏估计。显而易见,如果模型欠拟合将不能取得最好的预测效果。所以有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。
其中的一个方法是局部加权线性回归(Locally Weighted Linear Regression,LWLR)。在该算法中,我们给待预测点附近的每个点赋予一定的权重;然后在这个子集上基于最小均方差来进行普通的回归。与kNN一样,这种算法每次预测均需要事先选取出对应的数据子集。
该算法解出回归系数w的形式如下:
其中w是一个矩阵,用来给每个数据点赋予权重。
LWLR使用“核”(与支持向量机中的核类似)来对附近的点赋予更高的权重。核的类型可以自由选择,最常用的核就是高斯核,高斯核对应的权重如下:
这样就构建了一个只含对角元素的权重矩阵w,并且点x与x(i)越近,w(i,i)将会越大。上述公式包含一个需要用户指定的参数k,它决定了对附近的点赋予多大的权重,这也是使用LWLR时唯一需要考虑的参数,在图1中可以看到参数k与权重的关系。
图1 每个点的权重图(假定我们正预测的点是x=0.5),最上面的图是原始数据集,第二个图显示了当k=0.5时,大部分的数据都用于训练回归模型;而最下面的图显示当k=0.01时,仅有很少的局部点被用于训练回归模型
下面看看模型的效果,打开文本编辑器,将程序清单1-1的代码添加到文件regression.py中。
程序清单1-1局部加权线性回归函数
程序清单1-1中代码的作用是,给定x空间中的任意一点,计算出对应的预测值yHat。函数1wlr()的开头与程序清单1-1类似,读入数据并创建所需矩阵,之后创建对角权重矩阵weights。权重矩阵是一个方阵,阶数等于样本点个数。也就是说,该矩阵为每个样本点初始化了一个权重。接着,算法将遍历数据集,计算每个样本点对应的权重值:随着样本点与待预测点距离的递增,权重将以指数级衰减。输入参数k控制衰减的速度。与之前的函数stand-Regress()一样,在权重矩阵计算完毕后,就可以得到对回归系数ws的一个估计。