線性回歸 python小樣例

2022-07-31 10:15:12 字數 2901 閱讀 5964

線性回歸

優點:結果易於理解,計算上不複雜

缺點:對非線性的資料擬合不好

適用資料型別:數值型和標稱型資料

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 *23

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)

7for line in

fr.readlines():

8 linearr =

9 curline = line.strip().split('\t'

)10for i in

range(numfeat):

1112

14return

datamat,labelmat

1516

defstandregres(xarr,yarr):

17 xmat = mat(xarr); ymat =mat(yarr).t

18 xtx = xmat.t*xmat

19if linalg.det(xtx) == 0.0:

20print("

this matrix is singular, cannot do inverse")

21return

22 ws = xtx.i * (xmat.t*ymat)

23return 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)))

5for 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)

9if linalg.det(xtx) == 0.0:

10print("

this matrix is singular, cannot do inverse")

11return

12 ws = xtx.i * (xmat.t * (weights *ymat))

13return testpoint * ws

如果資料的特徵比樣本點還多應該怎麼辦?是否可以使用線性回歸和之前的方法來做**?

答案是否定的,即不能再使用前面介紹的方法,這是因為在計算(x^t*x)^-1的時候會出錯

如果特徵比樣本點還多(n>m),也就是說輸入資料的矩陣x不是滿秩矩陣,非滿秩矩陣在求逆

的時會出現問題,為解決這個問題,專家引入了嶺回歸的概念。簡單來說,嶺回歸就是在矩陣

x^t*x上加乙個λi從而使得矩陣非奇異,進而能對x^t*x+λi求逆。其中i是單位矩陣,λ是使用者定

義的乙個數值。

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

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

CART樹 python小樣例

決策樹不斷將資料切分成小資料集,直到所有目標變數完全相同,或者資料不能再切分為止,決策時是一種貪心演算法,它要在給定的時間內做出最佳選擇,但並不關心能否達到最優 樹回歸優點 可以對複雜和非線性的資料建模 缺點 結果不易理解 適用資料型別 數值型和標稱型資料 實現cart演算法和回歸樹,回歸樹和分類樹...

python實現線性回歸

定義 線性回歸在假設特徵滿足線性關係,根據給定的訓練資料訓練乙個模型,並用此模型進行 文中只介紹了簡單的概念,不涉及公式的證明等。從最簡單的一元線性關係介紹,假設有一組資料型態為 y theta x,其中 x y 我們根據 x,y 模擬出近似的 theta 引數值,進而得到 y theta x 模型...

python實現線性回歸

線性回歸模型是最簡單的機器學習模型,基礎可以從線性回歸模型開始入手,慢慢地過渡到非線性回歸以及神經網路模型。1.概念 2.線性回歸 簡單回歸 乙個自變數輸入,y x是一對一的關係,對映到幾何上來說就是二維座標系的直線方程,可表示為y 多元回歸 多個自變數,改變維度的大小。即 3.最小二乘法 通過向量...