線性回歸
優點:結果易於理解,計算上不複雜
缺點:對非線性的資料擬合不好
適用資料型別:數值型和標稱型資料
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值之間的差值,使用該誤差的簡單累加
將使得正差值和負差值相互抵消,所以我們採用平方誤差
1from 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)。在該演算法中,我們給待**點附近的每個點賦予一定的權重;
1def 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.最小二乘法 通過向量...