实现标准线性回归

介绍

线性回归是假设特证满足线性关系,根据给定的训练数据训练一个模型,即回归方程,并用此模型进行预测,回归:求回归系数的过程。具体做法是用回归系数乘以输入值,将结果相加,得到预测值。它是一种针对数值型数据的监督学习方法。


特点

  1. 适用于数值型,如果是标称型或名义型的数据,需要转为数值型数据

  2. 对于非线性数据拟合较差


查看数据分布

  1. 数据集包含150个样本,每个样本共2个特征,第1个为输入,第2个为结果。由于没有提供测试集,因此随机选择100个样本作为训练集,50个样本剔除结果后作为测试集;
  2. 通过散点图查看样本分布情况
#!/bin/usr/python
# -*- coding:utf-8 -*-
from numpy import *
from matplotlib import pyplot as plt

def loadDataSet(fileName):
    data = []
    dataSet = []
    xArr = []
    yArr = []
    fr = open(fileName)
    [data.append(line.strip('\r\n').split(',')) for line in fr.readlines()]
    [dataSet.append([float(line[0]), float(line[1])]) for line in data]
    [xArr.append([1,line1[0]]) for line1 in dataSet]
    [yArr.append(line2[-1]) for line2 in dataSet]
    return dataSet,xArr,yArr


def show(dataSet,xarr,yarr,ws):
    for i in range(shape(dataSet)[0]):
        plt.scatter(dataSet[i][0], dataSet[i][1], marker='o', color='r', label='1', s=10)
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.title('Sample Distribute')
    plt.show()

样本分布
可以看出,第一维特征和第二维特征具有某种线性关系


回归方程

Yi=XTiw

XiwYi

具体做法
1. 找到使误差最小的w, 误差是指预测值和真实值之间的误差
2. 由于误差可正可负,因此采用平方误差

i=1m(yixTiw)2

3. 对w求导,令它等于0,得到w的最优值:
w=XTX)1XTy

def regression(xArr,yArr):
    xMat = mat(xArr)
    yMat = mat(yArr).T
    xTx = xMat.T*xMat
    if linalg.det(xTx) == 0.0:
        print "矩阵不可逆!!"
        return
    w = xTx.I * (xMat.T*yMat)
    return w

这里写图片描述

绘制拟合模型和样本分布

def show(dataSet,xarr,yarr,ws):
        xMat = mat(xarr)
    yMat = mat(yarr)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(xMat[:,1].flatten().A[0],yMat.T[:,0].flatten().A[0],marker='o', color='r', label='1', s=10)
    xCopy = xMat.copy()
    xCopy.sort(0)
    yHat = xMat * ws
    ax.plot(xCopy[:,1],yHat)
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.title('Regression')
    plt.show()

这里写图片描述


验证模型优劣

方法:计算测试集的被剔除的真实Y序列和预测Y序列的相关系数

def main():
    dataSet,xarr,yarr = loadDataSet(r'/home/hu/文档/ML/iris.txt')  #load trainSet
    testSet,xTarr,yTarr = loadDataSet(r'/home/hu/文档/ML/irisTest.txt')  # load testSet
    #w = regression(xarr,yarr)
    w = regression(xTarr,yTarr)
    YPre = mat(xTarr)*w
    print corrcoef(YPre.T,yTarr)
    show(dataSet,xarr,yarr,w)


if __name__ == '__main__':
    main()

这里写图片描述
由上图可知,YPre预测值和YTarr实际值的相关系数达到0.95,采用此方法具有建模效果不错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值