机器学习之预测数值型数据: 回归
来源:互联网 发布:mac qq 讨论组 删除人 编辑:程序博客网 时间:2024/05/21 00:20
本文主要记录本人在学习机器学习过程中的相关代码实现,参考《机器学习实战》
from numpy import *import matplotlib.pyplot as pltdef loadDataSet(fileName): numFeat=len(open(fileName).readline().split('\t'))-1 with open(fileName) as fr: #~ numFeat=len(fr.readline().split('\t'))-1 dataMat=[];labelMat=[] 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,labelMatdef 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") return ws=xTx.I*(xMat.T*yMat) return ws#~ xArr,yArr=loadDataSet('ex0.txt')#~ print(xArr[0:2])#~ ws=standRegres(xArr,yArr)#~ print(ws)#~ xMat=mat(xArr)#~ yMat=mat(yArr)#~ yHat=xMat*ws#~ fig=plt.figure()#~ ax=fig.add_subplot(111)#~ ax.scatter(xMat[:,1].flatten().A[0],yMat.T[:,0].flatten().A[0])#faltten()是将其合并转化为一行的array,.A[0]表示取第0行#~ xCopy=xMat.copy()#~ xCopy.sort(0)#~ yHat=xCopy*ws#~ ax.plot(xCopy[:,1],yHat)#~ plt.show()#~ xArr,yArr=loadDataSet('ex0.txt')#~ ws=standRegres(xArr,yArr)#~ xMat=mat(xArr)#~ yMat=mat(yArr)#~ yHat=xMat*ws#~ co=corrcoef(yHat.T,yMat)#~ print(co)def lwlr(testPoint,xArr,yArr,k=1.0): xMat=mat(xArr);yMat=mat(yArr).T m=shape(xMat)[0] #~ 第三个参数:默认情况下输出的是对角线全“1”,其余全“0”的方阵,如果k为正整数,则在右上方第k条对角线全“1”其余全“0”,k为负整数则在左下方第k条对角线全“1”其余全“0” weights=mat(eye((m))) for j in range(m): 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('cannot do inverse') return ws=xTx.I*(xMat.T*(weights*yMat)) return testPoint*wsdef lwlrTest(testArr,xArr,yArr,k=1.0): m=shape(testArr)[0] yHat=zeros(m) for i in range(m): yHat[i]=lwlr(testArr[i],xArr,yArr,k) return yHat#~ xArr,yArr=loadDataSet('ex0.txt')#~ print(lwlr(xArr[0],xArr,yArr,1.0))#~ yHat=lwlrTest(xArr,xArr,yArr,0.003)def rssError(yArr,yHatArr): return ((yArr-yHatArr)**2).sum()def ridgeRegres(xMat,yMat,lam=0.2): xTx=xMat.T*xMat denom=xTx+eye(shape(xMat)[1])*lam if linalg.det(denom)==0.0: print('cannot do inverse') return ws=denom.I*(xMat.T*yMat) return wsdef ridgeTest(xArr,yArr): xMat=mat(xArr);yMat=mat(yArr).T yMean=mean(yMat,0) yMat=yMat-yMean xMeans=mean(xMat,0) xVar=var(xMat,0) xMat=(xMat-xMeans)/xVar numTestPts=30 wMat=zeros((numTestPts,shape(xMat)[1])) for i in range(numTestPts): ws=ridgeRegres(xMat,yMat,exp(i-10)) wMat[i,:]=ws.T return wMat#~ abX,abY=loadDataSet('abalone.txt')#~ ridgeWeights=ridgeTest(abX,abY)#~ fig=plt.figure()#~ ax=fig.add_subplot(111)#~ ax.plot(ridgeWeights)#~ plt.show()def regularize(xMat):#regularize by columns inMat = xMat.copy() inMeans = mean(inMat,0) #calc mean then subtract it off inVar = var(inMat,0) #calc variance of Xi then divide by it inMat = (inMat - inMeans)/inVar return inMatdef stageWise(xArr,yArr,eps=0.01,numIt=100): xMat=mat(xArr);yMat=mat(yArr).T #~ mean()函数功能:求取均值 #~ 经常操作的参数为axis,以m * n矩阵举例: #~ axis 不设置值,对 m*n 个数求均值,返回一个实数 #~ axis = 0:压缩行,对各列求均值,返回 1* n 矩阵 #~ axis =1 :压缩列,对各行求均值,返回 m *1 矩阵 yMean=mean(yMat,0) yMat=yMat-yMean xMat=regularize(xMat) m,n=shape(xMat) returnMat=zeros((numIt,n)) ws=zeros((n,1));wsTest=ws.copy();wsMax=ws.copy() for i in range(numIt): print(ws.T) lowestError=inf for j in range(n): for sign in [-1,1]: wsTest=ws.copy() wsTest[j]=+eps*sign yTest=xMat*wsTest rssE=rssError(yMat.A,yTest.A) if rssE<lowestError: lowestError=rssE wsMax=wsTest ws=wsMax.copy() returnMat[i,:]=ws.T return returnMatxArr,yArr=loadDataSet('abalone.txt')print(stageWise(xArr,yArr,0.01,200))
阅读全文
0 0
- 机器学习之预测数值型数据: 回归
- 机器学习实战——预测数值型数据:回归
- 《机器学习实战》预测数值型数据-回归(Regression)
- 《机器学习实战》预测数值型数据-回归(Regression)
- 机器学习实战-预测数值型数据:回归
- 机器学习实战_08预测数值型数据-回归
- 机器学习实战笔记-预测数值型数据:回归
- 机器学习实战-8预测数值型数据-回归
- 《机器学习实战》笔记之八——预测数值型数据:回归
- 机器学习实战学习笔记(七)预测数值型数据—回归(python3实现)
- 机器学习实战——第八章:用回归预测数值型数据
- 机器学习实战 第八章 预测数值型数据:回归(Regression)
- 代码注释:机器学习实战第8章 预测数值型数据:回归
- 机器学习(五):回归方法——预测数值型数据
- 【机器学习实战】第8章 预测数值型数据:回归
- 【机器学习实战】第8章 预测数值型数据:回归(Regression)
- 机器学习实战代码详解(八)预测数值型数据:回归
- 预测数值型数据:回归
- Mybatis的一级缓存和二级缓存
- memcached 以及 session-server部署
- kylin : killed by admin
- NIO ServerSocketChannel
- DialogFragment的简单使用
- 机器学习之预测数值型数据: 回归
- 实验报告->数组的定义和使用->字符串逆置
- myeclips安装gradle插件
- C++基础
- nginx 001
- java到底是值传递还是引用传递
- Linux 字符串截取的八种方法
- 常用函数整理
- Android LVDS格式(JEIDA与VESA)