局部加权线性回归(附实战代码python)

1.    前言:

    我们知道线性回归的一个问题就是欠拟合,将不能取得很好的预测效果。因为它是具有最小均方误差的无偏估计。解决这个问题的方法就是允许在估计中一些偏差。其中一个非常有效的方法就是局部加权线性回归(LWLR)。

2.    算法思想:

    2.1.     比较线性回归:

            

    2.2.    局部加权线性回归:(使用高斯核权重

            

            

                解释:

                        当样本点  接近预测点  时,权值大。  

                        当样本点  远离预测点  时,权值小。 

                            权值系数 指数衰减,其中参数  为衰减因子,即权重衰减的速率。

                                  越小 权重衰减越快。(依据权重函数易得知)

                                 从后面实战中我们可以更好的理解参数 

      最小二乘法,求解最佳回归系数。

                

                其中 W 为权重矩阵(对角阵):

                        

                  求解:(详细过程类似于线性回归求解过程

                  

3.    实战:(附完整项目代码

        3.1.    核心代码:局部线性回归函数

def lwlr(testPoint,xArr,yArr,k=1.0):
    xMat = np.mat(xArr); yMat = np.mat(yArr).T
    m = np.shape(xMat)[0]
    weights = np.mat(np.eye((m)))
    for j in range(m):                      #next 2 lines create weights matrix
        diffMat = testPoint - xMat[j,:]   #difference matrix
        weights[j,j] = np.exp(diffMat*diffMat.T/(-2.0*k**2))   #weighted matrix
    xTx = xMat.T * (weights * xMat)      
    if np.linalg.det(xTx) == 0.0:
        print ("This matrix is singular, cannot do inverse")
        return
    ws = xTx.I * (xMat.T * (weights * yMat))   #normal equation
    return testPoint * w

        3.2.    结果:

             当  = 1 时,结果类似于线性回归 欠拟合

            

            当  = 0.01 时 结果如下

            

            当  = 0.003 过拟合

            

    从结果来看 局部线性回归能很好地解决线性回归欠拟合的问题,但又可能出现过拟合。

所以参数调整影响了模型的泛化能力。选取合适参数至关重要。

    虽然局部线性回归能增强模型的泛化能力。但是它也有自己的缺陷。就是对每个点的预测都必须使用整个数据集。这样大大增加了计算量。


    4.    存在问题:

    考虑一个问题,当数据特征比训练集样本点还多时,也就是说不可逆,矩阵求导无计可施。 此时就要用缩减样本来“理解”数据,求得回归系数矩阵。


现在我们知道了线性回归以及局部加权线性回归,用此来预测鲍鱼的年龄。

示例代码:预测鲍鱼年龄

    

            


猜你喜欢

转载自blog.csdn.net/z_feng12489/article/details/80213739