機器學習 基於線性回歸,減縮係數來「理解」資料

2021-10-09 17:15:40 字數 3725 閱讀 1133

如果資料的特徵比樣本點還多應該怎麼辦?是否還可以使用線性回歸?答案是否定的。多元線性回歸的演算法,需要輸入資料的矩陣是滿秩矩陣。如果特徵比樣本點多,則說明輸入矩陣不是滿秩矩陣。

為了解決以上問題,我們可以引入「嶺回歸」「lasso法」「前向逐步回歸」三種縮減方法。

縮減:通過引入懲罰項,減少不重要的引數,這個技術在統計學中叫做縮減。

嶺回歸就是在矩陣xtx

x^tx

xtx上加上乙個λ

i\lambda i

λi從而使得矩陣非奇異,進而能對xtx

ix^tx+\lambda i

xtx+λi

求逆。其中矩陣i

ii是乙個mxm的單位矩陣,對角線上元素全為1,其他元素全為0。而λ

\lambda

λ是乙個使用者定義的數值。回歸係數的計算公式將變成:

w ^=

(xtx

+λi)

−1xt

y\hat = (x^tx+\lambda i)^x^ty

w^=(xt

x+λi

)−1x

ty演算法思想

嶺回歸通過**誤差最小化得到λ

\lambda

λ:獲取資料後首先抽取一部分資料作為測試集,剩下資料作為訓練集用於訓練引數w

ww訓練完畢後在測試集上測試**效能

選取不同的λ

\lambda

λ重複上述的過程,最終得到乙個使**誤差最小的λ

\lambda

λ對嶺回歸**的實現:

def

ridgeregress

(xmat, ymat, lam =

0.2)

: xtx = xmat.t * xmat

denom = xtx + eye(

int(shape(xmat)[1

]))* lam

if linalg.det(denom)==0

:return

ws = denom.i *

(xmat.t * ymat)

return ws

通過矩陣返回檢視λ

\lambda

λ對嶺回歸結果的影響,以便獲取合適的懲罰值:

def

ridgetest

(xarr, yarr)

: xmat2 = mat(xarr)

; ymat2 = mat(yarr)

.t ymean2 = mean(ymat2,0)

ymat2 = ymat2 - ymean2

xmeans = mean(xmat2,0)

xvar = var(xmat2,0)

xmat2=

(xmat2 - xmeans)

/xvar

numtestpts =

30 wmat = zeros(

(numtestpts,

int(shape(xmat2)[1

])))

for i in

range

(numtestpts)

: ws = ridgeregress(xmat2, ymat2, exp(i-10)

) wmat[i,:]

= ws.t

return wmat

前向逐步回歸演算法屬於貪心演算法,每一步都盡可能減少誤差。一開始,所有的權重都設為1,然後每一步所做的決策對某個權重增加或減少乙個很小的值。

偽**實現:

資料標準化,使其分布滿足0均值和單位方差

在每輪迭代過程中:

設定當前最小誤差lowesterror為正無窮

對每個特徵:

增大或縮小:

改變乙個係數得到乙個新的w

ww計算新w

ww下的誤差

如果誤差error小於當前最小誤差lowesterror:設定wbest等於當前的w

ww將w

ww設定為新的wbest

def

rsserror

(yarr,yhatarr)

:#yarr and yhatarr both need to be arrays

return

((yarr-yhatarr)**2

).sum(

)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 inmat

defstagewise

(xarr, yarr, eps =

0.01

, numit =

100)

: xmat = mat(xarr)

; ymat = mat(yarr)

.t ymean = mean(ymat,0)

ymat = ymat - ymean

xmat = regularize(xmat)

m, n = shape(xmat)

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.coy(

)

**分析:

1.資料輸入:xarr(輸入資料), yarr(**變數), eps(每次迭代需要調整的步長),numit(迭代次數)

2.首先將輸入資料轉換並存入矩陣,然後把特徵按照均值為0 方差為1進行標準化處理

3.建立乙個ws來儲存w

ww值,為了實現貪心演算法建立ws的兩份副本

4.通過迭代numit次優化過程,並且每次迭代都列印出w

ww向量,用於分析演算法執行的過程和效果

通過使用平方誤差,由函式rsserror()得到。該誤差初始值設為正無窮,經過所有的誤差比較後取最小的誤差。

機器學習 線性回歸

可以說基本上是機器學習中最簡單的模型了,但是實際上其地位很重要 計算簡單 效果不錯,在很多其他演算法中也可以看到用lr作為一部分 先來看乙個小例子,給乙個 線性回歸是什麼 的概念。圖來自 2 假設有乙個房屋銷售的資料如下 面積 m 2 銷售價錢 萬元 123 250 150 320 87 160 1...

機器學習(線性回歸)

在機器學習中,回歸 分類和標註共同構成了監督學習技術。監督學習 supervised learning 是機器學習在工業界應用最廣的乙個領域分支。在學術界中也是研究最多的領域之一。大家都知道的資料探勘十大經典演算法中,監督學習技術佔據6席。方法 自變數 特徵 因變數 結果 關係 回歸演算法是試圖採用...

機器學習 線性回歸

line fitter linearregression 建立模型 line fitter.fit temperature,sales 傳入引數 sales predict line fitter.predict temperature 模型 直線 直線上會有loss 計算loss時 要使用平方距離...