人工智能中文网
  • 主页
  • 线代考研视频
  • 线性代数
  • Python机器学习与算法
  • 大数据与机器学习
  • Python基础入门教程
  • 人工智能中文网
    教程目录
    阅读:

    局部加权线性回归算法详解(Python实现)

    在线性回归中会出现欠拟合的情况,有些方法可以用来解决这样的问题。局部加权线性回归(LWLR)就是这样的一种方法。

    局部加权线性回归采用的是给预测点附近的每个点赋予一定的权重,此时的回归系数可以表示为:


    其中,M 为给每个点的权重。

    LWLR 使用核函数来对附近的点赋予更高的权重,常用的有高斯核,对应的权重为:


    这样的权重矩阵只含对角元素。

    局部加权线性回归的具体实现如下所示:
    def lwlr(feature, label, k):
        '''局部加权线性回归
        input:  feature(mat):特征
                label(mat):标签
                k(int):核函数的系数
        output: predict(mat):最终的结果
        '''
        m = np.shape(feature)[0]
        predict = np.zeros(m)
        weights = np.mat(np.eye(m))
        for i in xrange(m):
            for j in xrange(m):
                diff = feature[i, ] - feature[j, ]
                weights[j,j] = np.exp(diff * diff.T / (-2.0 * k ** 2))
            xTx = feature.T * (weights * feature)
            ws = xTx.I * (feature.T * (weights * label))
            predict[i] = feature[i, ] * ws
        return predict
    程序中,函数 lwlr 实现了局部加权线性回归模型的训练,输入为训练数据的特征 feature,训练数据的预测值 label 以及高斯核函数的参数 k,输出为训练样本的最终的预测值。对于每一个样本,需要计算其与其他所有样本之间的权重,再利用如上的加权线性回归模型的计算方法,求得权重。

    局部加权线性回归的最终结果

    当 k=1 时,最终的结果如图 1 所示:

    局部加权线性回归k=1
    图 1 k=1

    当 k=0.01 时,最终的结果如图 2 所示:

    局部加权线性回归k=0.01
    图 2 k=0.01

    当 k=0.002 时,最终的结果如图 3 所示:

    局部加权线性回归k=0.002
    图 3 k=0.002

    当 k 的值逐渐变小,其拟合数据的能力也在变强。当 k 取得较大值时,如图 1 所示,出现了欠拟合,不能很好地反映数据的真实情况;当 k 值取得较小时,如图 3 所示,出现了过拟合。