关闭

[置顶] 《机器学习实战》--局部加权线性回归(LWR)

标签: 局部加权线性回归LWR机器学习
1032人阅读 评论(0) 收藏 举报
分类:

一 概述

通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting),比如数据集是
一个钟形的曲线。而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为它导致数据的
过拟合(overfitting),不符合数据真实的模型。

局部加权回归(LWR)是非参数学习方法。 首先参数学习方法是这样一种方法:在训练完成所有数据后得到一系列训练参数,然后根据训练参数来预测新样本的值,这时不再依赖之前的训练数据了,参数值是确定的。而非参数学习方法是这样一种算法:在预测新样本值时候每次都会重新训练数据得到新的参数值,也就是说每次预测新样本都会依赖训练数据集合,所以每次得到的参数值是不确定的。

具体的介绍在我之前的斯坦福机器学习笔记(一)中有详细介绍。链接为:http://blog.csdn.net/qq_30091945/article/details/61615501

这次运用的数据是来自《机器学习实战》这本书中第八章ex0文件中的数据。

二 代码

import numpy as np
import matplotlib.pyplot as plt

def LoadDataSet(file):
    """
    :param file:文件路径
    :return: 返回测试数据与标签
    """

    ftrain = open(file)
    trainingset = []
    labelset = []
    for line in ftrain.readlines():
        LineArr = line.strip().split('\t')
        trainingset.append([float(LineArr[0]),float(LineArr[1])])
        labelset.append(float(LineArr[2]))
    return trainingset, labelset

def LWRTest(traingxarr,xarr,yarr,k):
    Xmat = np.mat(xarr)
    Ymat = np.mat(yarr)
    # m是输入数据的个数,weights是单位矩阵
    m = np.shape(Xmat)[0]
    weights = np.eye(m)
    for i in range(m):
        diffmat = traingxarr - Xmat[i,:]
        weights[i,i] = np.exp(-(diffmat*diffmat.transpose())/(2.0*k**2))
    XT = Xmat.transpose()*(weights*Xmat)
    if np.linalg.det(XT) == 0:              #矩阵的行列式为0时不能进行之后的计算
        print('This Matrix is singular, cannot do inverse')
        return
    #theta是回归系数
    theta = XT.I*Xmat.transpose()*(weights*Ymat.transpose())
    ytest= traingxarr*theta
    return ytest


def LWR(trainingset,xarr,yarr,k):
    """
    :param trianingset:训练数据集
    :param xarr: 输入样本的横坐标
    :param yarr: 输入样本的纵坐标
    :param k: 带宽参数
    :return:返回预测值
    """
    # m是输入数据的个数,weights是单位矩阵
    m = np.shape(trainingset)[0]
    ytest = np.zeros(m)
    for i in range(m):
        ytest[i] = LWRTest(trainingset[i],xarr,yarr,k)
    return  ytest

def Show(xarr,yarr,ytest,k):
    """
    :param xarr: 样本数据特征值
    :param ytest: LWR回归得到的预测
    :param yarr: 样本数据标记值
    """
    xmat = np.mat(xarr)
    strInd = xmat[:, 1].argsort(0)
    xSort = xmat[strInd][:, 0, :]
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    ax.plot(xSort[:, 1], ytest[strInd])
    ax.scatter(xmat[:, 1].flatten().A[0], np.mat(yarr).T.flatten().A[0], s=2, c='red')
    title = "k = "
    title += str(k)
    ax.set_title(title)
    plt.savefig("D:\\Program Files (x86)\\机器学习\\斯坦福大学机器学习\\中文笔记\\Linear Regression\\LWR\\"+title+".jpg",dpi=400,bbox_inches='tight')
    plt.show()

def run_main():
    """
        这是主函数
    """
    file = 'D:\\Program Files (x86)\\机器学习\\机器学习实战\\源代码\\Ch08\\ex0.txt'
    xarr,yarr = LoadDataSet(file)
    k = [1.0,0.01,0.003]
    for i in k:
        ytest = LWR(xarr,xarr,yarr,i)
        Show(xarr,yarr,ytest,i)


if __name__ == '__main__':
    run_main()

下面是模型运行结果如下:
k = 1.0 (欠拟合)

这里写图片描述
k = 0.01(最佳拟合)
这里写图片描述
k = 0.003(过拟合)
这里写图片描述

1
0
查看评论

LWR 局部加权线性回归算法

http://blog.csdn.net/tianguokaka/article/details/14227187 分类: 统计学习方法2013-11-06 14:44 1649人阅读 评论(3) 收藏 举报 看了机器学习的第三课...
  • ShiZhixin
  • ShiZhixin
  • 2015-05-13 13:50
  • 1394

局部加权回归

通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting),比如数据集是 一个钟形的曲线。而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为它导致数据的 过拟合(overfitting),不符合数据真实的模型。   今天来讲一...
  • ACdreamers
  • ACdreamers
  • 2015-03-27 00:46
  • 8930

局部加权回归LOESS(locally weighted regression)

欠拟合和过拟合首先看下面的三幅图, 第一幅拟合为了 y=θ0+θ1xy=θ_0 + θ_1x 的一次函数 第二幅拟合为了y=θ0+θ1x+θ2x2y=θ_0 + θ_1x + θ_2x^2 的二次函数 第三幅拟合为了 y=∑5j=0θjxj y= \sum_{j=0}^5 θ_j x^j ...
  • u010561073
  • u010561073
  • 2017-02-24 11:35
  • 1948

机器学习-学习笔记3.1-局部加权回归

局部加权紧接着上面的线性回归中参数求解来继续讲吧。还是以上面的房屋价格的预测,它的中心思想是在对参数进行求解的过程中,每个样本对当前参数值的影响是有不一样的权重的。比如上节中我们的回归方程为(这个地方用矩阵的方法来表示Ɵ表示参数,i表示第i个样本,h为在Ɵ参数下的预测值):   我...
  • silence1214
  • silence1214
  • 2012-07-19 17:19
  • 19045

机器学习笔记(一)-局部加权回归(Locally weighted regression)LWR

在网上通过看斯坦福大学的机器学习课程,觉得讲的非常好。同时,为了加强自己的记忆,决定将自己学到的东西和一些理解记录下来,希望有所收获。废话不多说,直接开始笔记:局部加权回归(locally weighted regression)LWR我们在现实生活中的模型,大多数情况下不能够用线性模型去拟合。如果...
  • u014686356
  • u014686356
  • 2016-11-26 19:45
  • 891

详解局部加权回归

在线性回归中,对于给定的训练集,用一个线性表达式来拟合所有数据,当训练集中输入变量和目标变量之间的确存在线性关系时,通常拟合的很好。但是如果没有明显的线性关系的话,可能就拟合不到好的效果了。比如下面坐标表示的情形,用一条直线来拟合图上的点显然不是很合适。 这种情况叫做欠拟合(underfitti...
  • Allenalex
  • Allenalex
  • 2013-11-17 19:28
  • 10006

机器学习十大经典算法

原文地址:http://blog.jobbole.com/74438/ 朴素贝叶斯: 有以下几个地方需要注意: 1. 如果给出的特征向量长度可能不同,这是需要归一化为通长度的向量(这里以文本分类为例),比如说是句子单词的话,则长度为整个词汇量的长度,对应位置是该单词出现的次数。 ...
  • dajinniu
  • dajinniu
  • 2015-10-17 21:44
  • 1523

# 机器学习笔记2——参数学习、非参数学习、局部加权线性回归、线性回归的概率解释、logistics回归

机器学习笔记2——参数学习、非参数学习、局部加权线性回归、线性回归的概率解释、logistics回归
  • WuSnake123
  • WuSnake123
  • 2017-02-26 16:11
  • 423

机器学习实战之线性回归+局部加权线性回归

一、线性回归  用线性回归找到最佳拟合直线 回归的目的是预测数值型数据,根据输入写出一个目标值的计算公式,这个公式就是回归方程(regression equation),变量前的系数(比如一元一次方程)称为回归系数(regression weights)。求这些回归系数的过程就是回归。 ...
  • liangyingyi1006
  • liangyingyi1006
  • 2017-07-13 14:40
  • 348

机器学习实战——线性回归和局部加权线性回归(含python中复制的四种情形!)

书籍:《机器学习实战》中文版 IDE:PyCharm Edu 4.02 环境:Adaconda3  python3.6 注:本程序相比原书中的程序区别,主要区别在于函数验证和绘图部分。 一、一般线性回归(最小二乘法OLS) 回归系数求解公式: 说明:X矩阵中每一行是一个样本,...
  • ckzhb
  • ckzhb
  • 2017-11-28 21:59
  • 319
    个人资料
    • 访问:155549次
    • 积分:4927
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论