回归分析—线性回归原理和Python实现学习笔记

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

为什么要学习回归?机器学习实战作者说‘回归可以任何事情’。

1 线性回归原理

假设有如下方程,就是一个回归方程,系数wi为回归系数,求回归系数的过程被称为回归

线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出,那么怎样求回归系数呢?

至此线性回归推到已完成,接下来介绍线性回归的实现步骤

2 线性回归Python实现

——————————————————————————————————————————————————

from numpy import *import matplotlib.pyplot as plt def loadDataSet(fileName):      #general function to parse tab -delimited floats    dataMat = []    labelMat=[]    fr = open(fileName)    for line in fr.readlines():        curLine = line.strip().split('\t')        dataMat.append([float(curLine[0]),float(curLine[1])])        labelMat.append(float(curLine[2]))    print shape(dataMat)    print shape(labelMat)    return dataMat,labelMat #最佳拟合直线方法将数据视为直线进行建模   def standRegres(xArr,yArr):    xMat = mat(xArr)    yMat = mat(yArr).T    xTx = xMat.T*xMat    if linalg.det(xTx) == 0.0:        print "This matrix is singular, cannot do inverse"#行列式的值为0,无逆矩阵        return  '行列式为0'    ws = xTx.I * (xMat.T*yMat)#    ws=linalg.solve(xTx, xMat.T*yMat)    print ws    return ws #def show(dataMat,labelMat,ws):    xMat = mat(dataMat)    yMat = mat(labelMat)    yHat=xMat*ws    fig=plt.figure()    ax=fig.add_subplot(111)    ax.scatter(xMat[:,1],yMat.T[:,0])#    ax.scatter(xMat[:,0].flatten().A[0],yMat.T[:,0].flatten().A[0])    ax.plot(xMat[:,1],yHat)#    xcopy=xMat.copy()#    xcopy.sort(0)#    yHat=xcopy*ws#    ax.plot(xcopy[:,1],yHat)    plt.show()    corr=corrcoef(yHat.T,yMat)    print corr    return corr 

结果如下图所示,

为改进线性回归算法的准确率,有很过改进的算法,其中有局部加权线性回归,如下是各展示

分别在K=1,K=0.1,K=0.01,K=0.003,当K=1为普通的线性回归,当K=0.1变化不明显,当K=0.01是拟合效果较好,当K=0.03时出现过拟合现象

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

此外,如果数据的特征比样本点还多应该怎么办?统计学家引入岭回归、Lasso、前向逐步回归来解决这个问题,有兴趣的同学可以自行研究

点这里可以跳转到人工智能网站

发表评论