机器学习实战学习笔记4-预测数值型数据:回归

2019/7/24 13:33:01 人评论 次浏览 分类:学习教程

回归的一般方法

(1)收集数据:可以使用任何方法收集数据

(2)准备数据:回归需要数值型数据,标称型数据将被转换成二值型数据

(3)分析数据: 绘出数据的可视化二维图将有助于对数据做出理解和分析,在采用缩减法求得新回归系数之后,可以将新拟合线绘再图上作为对比

(4)训练算法:找到回归系数

(5)测试算法:使用R2R^2 或者预测值和数据的拟合度,来分析模型的效果

(6)使用算法:使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签

程序清单8-1 标准回归函数和数据导入函数

from numpy import *
def loadDataSet(fileName):    
    numFeat = len(open(fileName).readline().split('\t')) - 1 #特征值个数
    dataMat = []; labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr =[]
        curLine = line.strip().split('\t')
        for i in range(numFeat):
            lineArr.append(float(curLine[i]))
        dataMat.append(lineArr)
        labelMat.append(float(curLine[-1]))
    return dataMat,labelMat
def standRegres(xArr,yArr):
    xMat = mat(xArr);yMat = mat(yArr).T #xMat:200*2, yMat:1*200
    xTx = xMat.T*xMat #xTx:2*2
    #print(xTx)
    if linalg.det(xTx) == 0.0:  # 判断行列式是否为0 linalg.det()计算行列式,,需要判断矩阵行列式不为零,否则不能直接求逆。
        print("This matrix is singular,cannot do inverse") #这个矩阵是奇异的,不能做逆矩阵
        return
    ws = xTx.I * (xMat.T * yMat)  #xTx.I,矩阵的逆矩阵,也可以写成 ws = linalg.solve(xTx,xMat.T * yMat)
    #np.linalg.inv():矩阵求逆
    #np.linalg.det():矩阵求行列式(标量)
    #solve函数可以求解多元一次方程组
    return ws 

xArr,yArr = loadDataSet('ex0.txt')
#print(xArr)
shape(xArr)
(200, 2)
#print(yArr)
shape(yArr)
(200,)
ws=standRegres(xArr,yArr)
print(ws)
[[ 3.00774324]
 [ 1.69532264]]
xMat = mat(xArr)
#print(xMat)
yMat = mat(yArr)
yHat = xMat * ws
import matplotlib.pyplot as plt #--绘图
fig=plt.figure()
ax=fig.add_subplot(111)
#print(xMat[:,1].flatten())  #flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组。
#print(yMat.A[0])
#print(yMat.T[:,0].flatten().A[0])
ax.scatter(xMat[:,1].flatten().A[0],yMat.T[:,0].flatten().A[0]) #绘--原始数据

<matplotlib.collections.PathCollection at 0x93cea20>
xCopy = xMat.copy()
xCopy.sort(0) #将点按照feature2升序排列,all featrue1=1.0
#print(xCopy)
yHat = xCopy * ws
ax.plot(xCopy[:,1],yHat)
[<matplotlib.lines.Line2D at 0x5a3a9b0>]
plt.show()

在这里插入图片描述

yHat = xMat * ws

corrcoef(yHat.T,yMat) #numpy的corrcoef (yEstimate , yActual) 来计算预测值和真实值的相关性。yHat和yMat的相关系数是0.98
array([[ 1.        ,  0.98647356],
       [ 0.98647356,  1.        ]])

局部加权线性回归(Locally Weighted Linear Regression,LWLR)

给待预测点附近的每个点赋予一定的权重,该算法解出回归系数w的形式如下: