摘要:由于近期學業繁重,所以我就不說廢話了,直接上代碼線性回歸局部加權線性回歸代碼標準回歸函數和數據導入函數默認文本的最后一行為目標值第一列為偏移量,假定為常數第二列為,也就是圖中的橫坐標計算最佳擬合曲線標識矩陣的轉置矩陣轉置,變程行向量判斷
由于近期學業繁重QAQ,所以我就不說廢話了,直接上代碼~
線性回歸from numpy import * import matplotlib.pyplot as plt #標準回歸函數和數據導入函數 #默認文本的最后一行為目標值 #第一列為偏移量,假定為常數1.0 #第二列為x1,也就是圖中的橫坐標 def loadDataSet(fileName): numFeat=len(open(fileName).readline().split(" "))-1 dataMat=[] labelMat=[] fr=open(fileName) for line in fr.readlines(): lineArr=[] curLine=line.strip().split(" ") for i in range(numFeat): lineArr.append(float(curLine[i])) dataMat.append(lineArr) labelMat.append(float(curLine[-1])) return dataMat,labelMat #計算最佳擬合曲線 #.T標識矩陣的轉置 def standRegres(xArr,yArr): xMat=mat(xArr) #矩陣轉置,變程行向量 yMat=mat(yArr).T #判斷xTx的轉置與xTx相乘是否為0 xTx=xMat.T*xMat #若為0,那么計算逆矩陣的時候會出錯 if linalg.det(xTx)==0.0: print("this matrix is singular,cannot do inverse") return #計算ws #.I返回矩陣的逆 ws=xTx.I*(xMat.T*yMat) return ws #繪制數據集散點圖和最佳擬合直線圖 def drawFigure(): xArr,yArr=loadDataSet("ex0.txt") ws=standRegres(xArr,yArr) 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]) xCopy=xMat.copy() xCopy.sort(0) yHat=xCopy*ws ax.plot(xCopy[:,1],yHat) plt.show() #局部加權線性回歸 #給待預測的點附近的每個點賦予一定的權重 #在這個子集上基于最小均方差來進行普通的回歸 #使用的核為高斯核 #最終構建了一個只含對角元素的權重矩陣w,并且x與x(i)越近, #w(i,i)將會越大 #局部加權線性回歸函數 def lwlr(testPoint,xArr,yArr,k=1.0): xMat=mat(xArr) yMat=mat(yArr).T m=shape(xMat)[0] #創建對角矩陣 #權重矩陣是一個方陣,階數為樣本點的個數 #該矩陣為每個樣本點初始化了一個權重 weights=mat(eye((m))) #遍歷數據集,計算每個樣本點對應的權重值 #隨著樣本點與待預測點距離的遞增,權重將以指數級衰減 #參數k控制衰減的速度 #權重值大小以指數級衰減 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("This matrix is singular,cannot do inverse") return #得到回歸系數 ws=xTx.I*(xMat.T*(weights*yMat)) return testPoint*ws def lwlrTest(testArr,xArr,yArr,k=1.0): m=shape(testArr)[0] yHat=zeros(m) #為數據集中的每個點調用lwlr() for i in range(m): yHat[i]=lwlr(testArr[i],xArr,yArr,k) return yHat def drawfigure2(): xArr,yArr=loadDataSet("ex0.txt") #print(yArr[0]) yHat0=lwlr(xArr[0],xArr,yArr,1.0) #print(yHat0) yHat=lwlrTest(xArr,xArr,yArr,0.01) xMat=mat(xArr) strInd=xMat[:,1].argsort(0) xSort=xMat[strInd][:,0,:] fig=plt.figure() ax=fig.add_subplot(111) ax.plot(xSort[:,1],yHat[strInd]) ax.scatter(xMat[:,1].flatten().A[0],mat(yArr).T.flatten().A[0],s=2,c="red") plt.show() def main(): drawfigure2() #drawFigure() #xArr,yArr=loadDataSet("ex0.txt") #ws=standRegres(xArr,yArr) #xMat=mat(xArr) #yMat=mat(yArr) #計算預測值yHat和真實值y的匹配程度——計算兩個序列的相關程度 #yHat=xMat*ws #arr=corrcoef(yHat.T,yMat) #yHat與yMat的相關系數為0.98 #[[1. 0.98647356] #[0.98647356 1. ]] #print(arr) #[[1.0, 0.067732], [1.0, 0.42781],...] #print(xArr) #[3.176513, 3.816464,...] #print(yArr) #[[3.00774324] #[1.69532264]] #Haty=wx[0]*x0+ws[1]*x1 #print(ws) if __name__=="__main__": main()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43484.html
摘要:在大量對象上應用了回歸分析甚至包括人的身高。孩子的高度向著平均高度回退回歸。回歸的目的是預測數值型的目標值。這就是監督學習算法的一個例子。 @toc 1 預測數值型數據:回歸 1.1 什么是回歸? 大自然讓我們回歸到一定的區間范圍之內;反過來說就是,有一個平均的水平,可以讓突出的事物能向他靠攏。 回歸是由達爾文(Charles Darwin)的表兄弟Francis Galton發明的...
閱讀 1438·2021-09-28 09:44
閱讀 2501·2021-09-28 09:36
閱讀 1144·2021-09-08 09:35
閱讀 1982·2019-08-29 13:50
閱讀 810·2019-08-29 13:29
閱讀 1130·2019-08-29 13:15
閱讀 1724·2019-08-29 13:00
閱讀 2988·2019-08-26 16:16