線性迴歸 python小範例

來源:互聯網
上載者:User

標籤:最小   lin   解決   分類方法   特徵   估計   差分   cannot   can   

線性迴歸
優點:結果易於理解,計算上不複雜
缺點:對非線性資料擬合不好
適用資料類型:數值型和標稱型資料
horse=0.0015*annualSalary-0.99*hoursListeningToPulicRadio
這就是所謂的迴歸方程,其中的0.0015和-0.99稱作迴歸係數,
求這些迴歸係數的過程就是迴歸。一旦有了這些迴歸係數,再給定輸入,做預測就非常容易了
具體的做法就是用迴歸係數乘以輸入值,再將結果全部加在一起,就得到了預測值
迴歸的一般方法
(1)收集資料:採用任意方法收集資料
(2)準備資料:迴歸需要數值型資料,標稱型資料將被轉成二值型資料(3)分析資料:繪出資料的可視化二維圖將有助於對資料做出理解和分析,在採用縮減法球的新迴歸係數之後,
可以將新擬合線繪在圖上作為對比
(4)訓練演算法:找到迴歸係數
(5)測試演算法:適用R2或者預測值和資料的擬合度,來分析模型的效果
(6)使用演算法:使用迴歸,可以在給定輸入的時候預測出一個數值,這是對分類方法的提升,
因為這樣可以預測連續型資料而不僅僅是離散的類別標籤
應當怎樣從一大堆資料中求出迴歸方程呢?嘉定輸入資料存放在舉著呢X中,而迴歸係數存放在向量w中,那麼對於
給定的資料x1,預測結果將會通過y1=x1^T *W給出。現在的問題是,手裡有些x和對應的y值,怎樣才能找到W呢?
一個常用的方法就是找出使誤差最小的w。這裡的誤差是指預測y值和真實y值之間的差值,使用該誤差的簡單累加
將使得正差值和負差值相互抵消,所以我們採用平方誤差

 1 from numpy import * 2  3 def loadDataSet(fileName):      #general function to parse tab -delimited floats 4     numFeat = len(open(fileName).readline().split(‘\t‘)) - 1 #get number of fields 5     dataMat = []; labelMat = [] 6     fr = open(fileName) 7     for line in fr.readlines(): 8         lineArr =[] 9         curLine = line.strip().split(‘\t‘)10         for i in range(numFeat):11             lineArr.append(float(curLine[i]))12         dataMat.append(lineArr)13         labelMat.append(float(curLine[-1]))14     return dataMat,labelMat15 16 def standRegres(xArr,yArr):17     xMat = mat(xArr); yMat = mat(yArr).T18     xTx = xMat.T*xMat19     if linalg.det(xTx) == 0.0:20         print("This matrix is singular, cannot do inverse")21         return22     ws = xTx.I * (xMat.T*yMat)23     return ws

線性迴歸的一個問題是有可能出現欠擬合現象,因為它求的是具有最小均方誤差的無偏估計。
顯而易見,如果模型欠擬合將不能取得較好的預測結果。所以有些方法允許在估計中引入一些偏差,
從而降低預測的均方誤差。
其中一個方法是局部加權線性迴歸(LWLR)。在該演算法中,我們給待預測點附近的每個點賦予一定的權重;

 

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

如果資料的特徵比樣本點還多應該怎麼辦?是否可以使用線性迴歸和之前的方法來做預測?
答案是否定的,即不能再使用前面介紹的方法,這是因為在計算(x^T*x)^-1的時候會出錯
如果特徵比樣本點還多(n>m),也就是說輸入資料的矩陣x不是滿秩矩陣,非滿秩矩陣在求逆
的時會出現問題,為解決這個問題,專家引入了嶺迴歸的概念。簡單來說,嶺迴歸就是在矩陣
X^T*X上加一個λI從而使得矩陣非奇異,進而能對x^T*x+λI求逆。其中I是單位矩陣,λ是使用者定

義的一個數值。

嶺迴歸是縮減法的一種,相當於對迴歸係數的大小施加了限制。另一種很好的縮減法是lasso。Lasso難以求解,但可以使用計算簡便的逐步線性迴歸方法來求得近似的結果

縮減法還可以看作是對一個模型增加偏差的同時減少方差。偏差方差分析折中是一個重要的概念,可以協助我們理解現有規模並做出改進,從而得到更好的模型

 

線性迴歸 python小範例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.