1. 程式人生 > >LARS 最小角迴歸演算法簡介

LARS 最小角迴歸演算法簡介

最近開始看Elements of Statistical Learning, 今天的內容是線性模型(第三章。。這本書東西非常多,不知道何年何月才能讀完了),主要是在看變數選擇。感覺變數選擇這一塊領域非常有意思,而大三那門迴歸分析只是學了一些皮毛而已。過兩天有空,記一些ESL這本書裡講的各種變數選擇方法在這裡。

先講一下今天看到的新方法,所謂的LARS(Least Angle Regression)。

LARS是大神Efron他們搞出來做變數選擇的一套演算法,有點像Forward Stepwise(向前逐步迴歸),但和Forward Stepwise不同點在於,Forward Stepwise每次都是根據選擇的變數子集,完全擬合出線性模型,計算出RSS,再設計統計量(如AIC)對較高的模型複雜度作出懲罰,而LARS是每次先找出和因變數相關度最高的那個變數, 再沿著LSE的方向一點點調整這個predictor的係數,在這個過程中,這個變數和殘差的相關係數會逐漸減小,等到這個相關性沒那麼顯著的時候,就要選進新的相關性最高的變數,然後重新沿著LSE的方向進行變動。而到最後,所有變數都被選中,估計就和LSE相同了。

LARS的演算法實際執行步驟如下:

      1. 對Predictors進行標準化(去除不同尺度的影響),對Target Variable進行中心化(去除截距項的影響),初始的所有係數都設為0,此時殘差 r 就等於中心化後的Target Variable

      2. 找出和殘差r相關度最高的變數X_j

      3. 將X_j的係數Beta_j 從0開始沿著LSE(只有一個變數X_j的最小二乘估計)的方向變化,直到某個新的變數X_k與殘差r的相關性大於X_j時

      4. X_j和X_k的係數Beta_j和Beta_k,一起沿著新的LSE(加入了新變數X_k的最小二乘估計)的方向移動,直到有新的變數被選入

      5. 重複2,3,4,直到所有變數被選入,最後得到的估計就是普通線性迴歸的OLS

從上面這個演算法可以看出,LARS這個東西明顯和OLS, Ridge Regression等給出了Closed-form solutions的模型不同,而是給出了一套對計算機來說非常友好的演算法。這也說明了隨著計算機能力的強大,現代統計基本上越來越靠近演算法,而和模型無關。

這個演算法看完以後,我就試圖用R實現這套演算法,最後還沒有美化過的效果圖如下,左邊是後來找到的Efron他們寫的lars包做出來的效果,乍看之下還是很像,但是我發現有一些地方貌似有出入(我的程式似乎有一些變數過早地被選入了。。),目前還不知道哪裡出了錯,回頭仔細看看。至於程式碼神馬的,由於寫的太亂了,過兩天寫的好看一點再發上來.

 

參考文獻:

http://blog.sina.com.cn/s/blog_61f1db170101ca8i.html

LARS 演算法簡介:https://cosx.org/2011/04/an-introduction-to-lars

熱門資料探勘模型應用入門(一): LASSO 迴歸,https://cosx.org/2016/10/data-mining-1-lasso/