前言:網上關於各種迴歸分析,無論是lasso還是ridge都挺多,但許多也都泛泛而談,然後給一段python或者R程式碼,最後加上各種reference以及廣告。當然,如今除學霸大牛,幾乎不會有人自己從頭開始寫線性模型,我本人也是調包俠。但筆者還是希望能給大家深入的說說ridge,它背後的數學以及如何具象的理解。

首先先來回顧一下普通的線性模型:

y = X\beta

。現實生活中,由於我們根本不知道真實的

\beta

到底是多少,我們只能透過已觀察到的資料來推算,所以我們能做到的其實是

\hat{y} = X\hat{\beta}

。所以這些戴了帽子的就是我們推測的資料,而沒戴帽子的就是實際觀察到的資料(什麼,你問我為什麼

X

沒戴帽子?那你這不造假呢)。我們的目標就是讓戴帽子的和真主儘量不要差太遠,所以要找到一個

{\beta}

使得

(y - \hat{y})^2

最小:

RSS(\beta) = (y - X\beta)^T(y - X\beta)

微積分老師說過,當我們想要找到一個函式最小值的時候我們就開始求導然後把導數設為0:

\frac{\partial RSS}{\partial \beta}=-2X^T(y-X\beta)=0\Rightarrow \hat{\beta}=(X^TX)^{-1}X^Ty

我相信大家對此番操作已經見慣不怪,但不知大家有沒有想過在影象中這是怎麼來的。如果我們把

X

放在二維中,那麼我們可以這樣看:

深入淺出說說ridge regression

黃色的部分是

X

所在的平面,紅色的箭頭是實際

y

所在的地方,那麼

\hat{y}

就是

y

X

平面上的投影。只有這樣,

y

\hat{y}

的距離是最短的。你也許突然想起了線性代數老師的教導,如果我們連線

y,\hat{y}

,這個向量就是

y-\hat{y}

,且它垂直於

X

所在的平面。這可能又勾起了遙遠的記憶,如果兩個向量垂直那他們的內積為0:

X^T(y-\hat{y})=0\Rightarrow X^T(y-X\beta)=0

這不正是我們在之前求導時得到的式子嗎!

此時你感受到了線代之神的召喚,覺得是時候繼續看看ridge regression。無論是ridge還是lasso都屬於一種縮減(shrinkage)方法,也就是控制係數的大小,這也區別與那些特徵子集選擇演算法和以主成分迴歸為代表的改變

X

的演算法。大家應該都見過ridge regression可以寫為:

minimize \sum_{i=1}^{N}{(y_i-\beta^Tx_i)^2}  s.t\sum_{i=1}^{P}{\beta_j^2}\leq \lambda

\Leftrightarrow minimize (y-X\beta)^T(y-X\beta) \space s.t \sum_{i=1}^{P}{\beta_j^2}\leq\lambda

翻譯以下上面的式子就是:求使得

(y - X\beta)^T(y - X\beta)

最小的

\beta

,且

\beta

滿足

\sum_{i=1}^{P}{\beta_j^2}\leq\lambda

這裡必須要說,ridge regression得出的結果對

y,X

的選擇是敏感的,所以大家一定要記得預處理,使得

\mathbb{E}[X]=0, VAR[X]=1

y

也應中心化。再思考一下,如果連

\beta_0

也就是迴歸中的常數也要被縮減,那結果就會不穩定(意思是迴歸的時候對每個

y_i+c

,預測的結果不會是

\hat{y}_i+c

),所以我們在這裡忽略

\beta_0

。而且,我們通常用

\bar{y}=\frac{1}{N}\sum_{i=1}^{N}{y_i}

來估計

\beta_0

,在我們中心化y以後

\bar{y}=0

。說了這麼多我們重複之前的步驟:

RSS(\beta)=(y - X\beta)^T(y - X\beta)+\lambda\beta^T\beta

\frac{\partial RSS}{\partial \beta}=-2X^T(y-X\beta)-2\lambda\beta=0\Rightarrow \hat{\beta}_{ridge}=(X^TX-\lambda I)^{-1}X^Ty

I

是一個單位矩陣。從這裡線代逐漸變態,不想看得同學可以直接跳到下一個有圖的地方,但我儘量寫的清晰明瞭。線上性代數中有一種魔法叫奇異值分解,透過魔法我們能把

X

分解為:

X=UDV^T

,且有以下幾種性質:

U,V分別是

N\times p, p\times p

的正交矩陣(orthogonal matrix),

且U和X的列空間是一樣的,V的列空間和X的行空間是一樣的。

D是一個對角矩陣,且對角上的數滿足

d_1\geq d_2\geq...\geq d_p\geq0

,這些d就叫X的奇異值。如果有d等於0,那麼X就是奇異矩陣,即不可逆。

OK,之前我們已經知道以下兩個式子

\hat{\beta}_{ls}=(X^TX)^{-1}X^Ty

\hat{\beta}_{ridge}=(X^TX-\lambda I)^{-1}X^Ty

於是我們需要把已知的帶入上面所說的奇異值分解魔法。首先,因為U,V是正交矩陣,所以

UU^T=U^TU=I, VV^T=V^TV=I

。再來一步步看,

XX^T=UDV^T(UDV^T)^T=UDV^TVD^TU^T=UD^2U^T

X^TX=(UDV^T)^TUDV^T=VD^TU^TUDV^T=VD^2V^T

看起來非常對稱,非常好看對吧,在此不得不膜一下。

X\hat{\beta}_{ls}=X(X^TX)^{-1}X^Ty =UDV^T(VD^2V^T)^{-1}VDU^Ty=UU^Ty

X\hat{\beta}_{ridge}=X(X^TX-\lambda I)^{-1}X^Ty =UDV^T(VD^2V^T-\lambda I)^{-1}VDU^Ty

,再把

I

替換成

VV^T

=UDV^T(VD^2V^T-\lambda V^TV)^{-1}VDU^Ty=UDV^T(V(D^2+\lambda)V^T)^{-1}VDU^Ty=UD(D^2+\lambda)^{-1}DU^Ty

所以我們透過奇異值分解得到了以下兩個結論:

X\hat{\beta}_{ls}=UU^Ty

X\hat{\beta}_{ridge}=UD(D^2+\lambda)^{-1}DU^Ty

但由於我們都知道D是一個對角矩陣,也就是除了對角其他都是0,0的部分我們都不關心,所以可以再拆開這個矩陣看看:

X\hat{\beta}_{ridge}=UD(D^2+\lambda)^{-1}DU^Ty=\sum_{j=1}^{p}{u_j\frac{d^2_j}{d^2_j+\lambda}u_j^Ty}

這裡的

u_j

是U的列。把這個式子對比一下

X\hat{\beta}_{ls}=UU^Ty

就發現,其實他們的區別就在於

\frac{d^2_j}{d^2_j+\lambda}

。而且我們都知道

\lambda\geq0

,所以

\frac{d^2_j}{d^2_j+\lambda}\leq1

。這也應證了之前說的,ridge regression是一種縮減,並且,

d_j

越小,縮減的也越多。所以。。。。。到底是什麼決定了d的大小呢?

先來用數學的角度來看一看這個問題,樣本的協方差(covariance):

S=\frac{X^TX}{N}=\frac{VD^2V^T}{N}

X^TX=VD^2V^T

,也是另一種分解魔法,叫做特徵值分解。既然說到特徵值分解了,那你也一定想到了主成分分析(PCA),這裡的

v_j

即是特徵向量,也在主成分所在的方向,

v_1

就是第一主成分,之後的以此類推。

在協方差矩陣中,對角上的數其實是方差,所以不難看出

VAR(z_j)=VAR(Xv_j)=\frac{d_j^2}{N}

。這樣來看d越小的時候,這個主成分方向的方差越小。結合之前的式子

X\hat{\beta}_{ridge}=\sum_{j=1}^{p}{u_j\frac{d^2_j}{d^2_j+\lambda}u_j^Ty}

終於明白:

ridge regression會更多縮減方差較小的方向!

如果你還沒懂,上圖來解釋。

假設X是二維的,把X畫出來得到的是

深入淺出說說ridge regression

2。 然後找出主成分所在的方向(PCD)。圖中PCD1是方差最大的方向,即第一主成分方向,PCD2是方差第二大的地方(因為X是二維,所以在這裡也是方差最小的),即第二主成分方向。

深入淺出說說ridge regression

3。 把PCD當作新的座標,把資料投影在新的空間上

深入淺出說說ridge regression

4。 類似之前普通線性迴歸的方法找到 y在主成分組成的平面上的投影,然後根據之前所說的相應縮減所有主成分向量,最後縮減過主成分的線性組合就是的

\hat{y}_{ridge}

\hat{y}_{ridge}

可能會和

\hat{y}_{ls}

方向不同,且更靠近0。

深入淺出說說ridge regression

這個也可以理解為,在方差較大的方向上ridge給出了更準確的梯度。

也許你有些好奇,到底為什麼要這麼做,畢竟X在各個方向上的方差和y到底有什麼關係。的確,我們這麼做是因為我們假設:

y變化多的方向也是x變化多的方向

。這個假設在大部分時候是真的,但不一定總是真的。這也引出了另一個結論,ridge regression得出的係數是有偏差的估計量(biased estimator)。畢竟ridge是帶著有方差的眼鏡看樣本的。

最後,雖然無論是普通線性迴歸還是ridge迴歸

\hat{y}

都可以用矩陣X,y直接算出來,但實際上除特殊情況外我依舊用sklearn提供的lbfgs,sag或sga,因為這些方法都比矩陣的逆運算快。所以,說到底做個調包俠也不錯。

最最後,有錯誤的地方歡迎大家指正!

Reference:

Hastie, T。, Friedman, J。, & Tisbshirani, R。 (2017)。

The Elements of statistical learning: data mining, inference, and prediction

5。1 - Ridge Regression: STAT 508。 (n。d。)。 Retrieved from

https://

online。stat。psu。edu/sta

t508/lesson/5/5。1