机器学习-局部加权线性回归
原理简述
线性回归的一个问题时又可能出现欠拟合现象,为了解决这个问题,我们可以采用一个方法是局部加权线性回归(Locally Weighted Linner Regression),简称LWLR。该算法的思想就是给带预测点附近的每一个点赋予一定的权值,然后按照简单线性回归求解w的方法求解,与KNN一样,这种算法每次预测均需要实现选取出对应的数据子集。该算法解出回归系数w的形式如下:
其中W是一个矩阵,用来给每个数据点赋予权重。
LWLR使用“核“来对附近的点赋予更高的权重。核的类型可以自由选择,最常用的是高斯核,起对应如下:
这样我们就构建一个只含对角元素的权重矩阵W,并且点越近,w值越大。
实现
接简单线性回归篇,,,简单线性回归见:机器学习-线性回归
n = x.shape[0]
weight = np.mat(np.eye(n)) #构建一个同大小的单位W矩阵
yhat = np.zeros(n) #初始化接收
for i in range(n): #外循环计算每个点的预测值
for j in range(n): #内循环计算每个点的权重值
diffmat = x[i] - x[j]
weight[j,j] = np.exp(diffmat*diffmat.T/(-2*3**2)) #(-2*k**2)k值可变
xtx = x.T*(weight*x)
ws = np.linalg.pinv(xtx)*(x.T*(weight*y))
yhat[i] = x[i]*ws;
yhat
可视化结果:k==0.1,过拟合。
可视化结果:k==3
可视化结果:k==10