在小弟的上一篇文章中,簡單的介紹了LARS算法是怎么回事。主要參考的是Efron等人的經(jīng)典文章least angle regression。在這篇文章中,還提到了一些有趣的看法,比如如何用LARS算法來求解lasso estimate和forward stagewise estimate。這種看法將我對于模型選擇的認(rèn)識提升了一個層次。在這個更高的層次下看回歸的變量選擇過程,似乎能有一些更加創(chuàng)新的想法。
lasso estimate的提出是Tibshirani在1996年JRSSB上的一篇文章Regression shrinkage and selection via lasso。所謂lasso,其全稱是least absolute shrinkage and selection operator。其想法可以用如下的最優(yōu)化問題來表述:
在限制了∑Jj=1|βj^|≤t的情況下,求使得殘差平和∥y?Xβ^∥2達(dá)到最小的回歸系數(shù)的估值。
我們熟悉如何求解限制條件為等號時,回歸方程的求解。也就是用lagrange乘子法求解。但是對于這種,限制條件是不等號的情況,該如何求解,則有兩種想法。第一種,也是我比較傾向于的方法,是利用計算機(jī)程序,對t從0開始,不斷慢慢增加它的值,然后對每個t,求限制條件為等號時候的回歸系數(shù)的估計,從而可以以t的值為橫軸,作出一系列的回歸系數(shù)向量的估計值,這一系列的回歸系數(shù)的估計值就是lasso estimation。另外一種想法,是借助與最優(yōu)化問題中的KKT條件,用某個黑箱式的算法,求解。(本人對于最優(yōu)化方面的東西實(shí)在是不很熟悉,故不在此弄斧,只求拋磚引玉,能有高手給出這種想法的具體介紹。)
lasso estimate具有shrinkage和selection兩種功能,shrinkage這個不用多講,本科期間學(xué)過回歸分析的同學(xué)應(yīng)該都知道嶺估計會有shrinkage的功效,lasso也同樣。關(guān)于selection功能,Tibshirani提出,當(dāng)t值小到一定程度的時候,lasso estimate會使得某些回歸系數(shù)的估值是0,這確實(shí)是起到了變量選擇的作用。當(dāng)t不斷增大時,選入回歸模型的變量會逐漸增多,當(dāng)t增大到某個值時,所有變量都入選了回歸模型,這個時候得到的回歸模型的系數(shù)是通常意義下的最小二乘估計。從這個角度上來看,lasso也可以看做是一種逐步回歸的過程。
在我的上一篇文章中,提到了Efron對于逐步回歸的一種看法,就是在某個標(biāo)準(zhǔn)之下(比如LARS的標(biāo)準(zhǔn)就是要保證當(dāng)前殘差和已入選變量之間的相關(guān)系數(shù)相等,也就是當(dāng)前殘差在已入選變量的構(gòu)成空間中的投影,是那些變量的角平分線)選擇一條solution path,在這個solution path上proceed,不斷吸收新的變量進(jìn)入,然后調(diào)整solution path 繼續(xù)proceed。那么對于求解lasso的算法,也有一個相應(yīng)的對應(yīng)。Efron提出了一種修正的LARS算法,可以用修正的LARS算法來求解所有的lasso estimates。下面我介紹一下這種修正的LARS算法。
首先假設(shè)我們已經(jīng)完成了幾步LARS steps。這時候,我們已經(jīng)有了一個回歸變量集,我們記這個回歸變量集為XA。這個集合就對應(yīng)著一個對于Y的估計,我們記為μ^A。這個估值對應(yīng)著一個lasso方法對于響應(yīng)的估值(這里我認(rèn)為LARS估值和lasso估值應(yīng)該是一樣的),lasso的估值,對應(yīng)著回歸系數(shù)的lasso估值,回歸系數(shù)向量的lasso估值我們記為β^。
為了繼續(xù)進(jìn)行下一步,我們先給出一個向量的表達(dá)式,然后再解釋一下它
wA=(1′A(X′AXA)?11A)?12(X′AXA)?11A.
XAwA就是LARS算法的在當(dāng)前回歸變量集下的solution path。那么我們可以把wA作為β的proceed的path。Efron定義了一個向量d^,這個向量的元素是sjwj,其中sj是入選變量xj與當(dāng)前殘差的相關(guān)系數(shù)的符號,也是βj^的符號。對于沒有入選的變量,他們對應(yīng)在d^中的元素為0。也就是對應(yīng)著μ(r)=Xβ(r),我們有
βj(r)=βj^+rdj^
將LARS的solution path對應(yīng)到lasso estimate的path上,這種對應(yīng)的想法非常值得借鑒。
很顯然,βj(r)會在rj=?βj^/dj^處變號。那么對于我們已經(jīng)有的lasso estimateβ(r),它中的元素會在最小的的那個大于0的rj處變號。我們記之為rˉ。如果沒有rj大于0,那么rˉ就記為無窮大。
對于LARS本身而言,在已經(jīng)有了如今的回歸變量集和當(dāng)前殘差的基礎(chǔ)上,我們就會有條solution path,在這個solution path上proceed的最大步記為r^.通過比較r^和rˉ就會有進(jìn)一步的想法。Efron的文章證明了如果rˉ小于r^,則對應(yīng)于LARS估計的那個βj(r)不會成為一個lasso estimation。(這個是因?yàn)楫?dāng)前殘差和對應(yīng)變量的相關(guān)系數(shù)的符號一定是和該變量的系數(shù)符號一致才行)。在這種情況下,我們就不能繼續(xù)在LARS的solution path上繼續(xù)前進(jìn)了,為了利用LARS算法求得lasso estimate,Efron提出把rˉ所對應(yīng)的那個rj所對應(yīng)的xj從回歸變量中去掉。去掉之后再計算當(dāng)前殘差和當(dāng)前這些變量集之間的相關(guān)系數(shù),從而確定一條新的solution path,繼續(xù)進(jìn)行LARS step。這樣進(jìn)行下去,可以通過LARS算法得到所有的lasso estimate。
這個對于LARS的lasso修正算法,被Efron稱作“one at a time”條件,也就是每一步都要增加或刪掉一個變量。下圖顯示了用修正了的LARS算法求lasso estimate的過程。
這個圖是Efron等人的文章中,對于一個實(shí)際數(shù)據(jù)進(jìn)行回歸得到的。該數(shù)據(jù)一共有10個變量。圖的橫軸,是所有回歸系數(shù)估值的絕對值之和,這個值從0增加。左側(cè)的縱軸,是回歸系數(shù)的估值,右側(cè)縱軸是這些回歸系數(shù)對應(yīng)的變量的下標(biāo)。這個圖中,我們可以看到每一個回歸系數(shù)的path??梢钥吹降谄邆€變量對應(yīng)的回歸系數(shù)在橫軸快到3000的時候變?yōu)榱?,說明到這一步時,該變量被刪除掉,之后又被重新添加到了回歸變量集中。
下面通過一個簡單的模擬,對lars和lasso以及forward stagewise做一個簡單的實(shí)現(xiàn)。其實(shí)在R中已經(jīng)有了一個名為lars的包,可以實(shí)現(xiàn)上述三種回歸。
首先,我要模擬的方程為
y=x31+x21+x1+13x32?x22+23x2+e
其中x1和x2是服從二維聯(lián)合正態(tài)分布,均值為零向量,cov(x1,x2)=0.5,var(x1)=var(x2)=1,e服從N(0,9)。我取了50次觀測,然后分別通過lasso,lars,以及forward stagewise三種算法進(jìn)行了回歸,其變量的回歸路徑如下圖。
簡單的代碼我直接貼在本文的最后。從這三個算法的圖中,我們并看不出有特別的區(qū)別,只能看出一些細(xì)小的差別。至于要判斷哪種算法更好,則應(yīng)該因問題而異。也不是本文能夠論述的問題了。
對于LARS算法的修正,還可以應(yīng)用到計算forward stagewise的estimate中,在Efron的文章中也有介紹。他的這種看法,好似凌駕在整個回歸變量選擇過程之上,從一個更高的角度觀察之,給出一種更為一般性的視角。這也就是大牛和一般人之間的差別。讀Efron的文章,總有一種讓人想要膜拜的沖動。對于模型選擇方面的東西,值得挖掘的還很多。Tibshirani在最新的一篇綜述性的文章中,給出了lasso的誕生到現(xiàn)今發(fā)展的一系列流程。感興趣的讀者,可以去看看這篇文章,在cos論壇上有。鏈接如下:
http://cos.name/cn/topic/104104
用lars算法做模擬的代碼:
利用lars模擬