機器學習 Lasso迴歸算法

Lasso迴歸算法: 座標軸下降法與最小角迴歸法小結

    前面的文章對線性迴歸做了一個小結,文章在這: 線性迴歸原理小結。裏面對線程迴歸的正則化也做了一個初步的介紹。提到了線程迴歸的L2正則化-Ridge迴歸,以及線程迴歸的L1正則化-Lasso迴歸。但是對於Lasso迴歸的解法沒有提及,本文是對該文的補充和擴展。以下都用矩陣法表示,如果對於矩陣分析不熟悉,推薦學習張賢達的《矩陣分析與應用》。

1. 回顧線性迴歸 

    首先我們簡要回歸下線性迴歸的一般形式: 

    hθ(X)=Xθhθ(X)=Xθ

    需要極小化的損失函數是: 

    J(θ)=12(Xθ−Y)T(Xθ−Y)J(θ)=12(Xθ−Y)T(Xθ−Y)

    如果用梯度下降法求解,則每一輪θθ迭代的表達式是: 

    θ=θ−αXT(Xθ−Y)θ=θ−αXT(Xθ−Y)

    其中αα爲步長。

    如果用最小二乘法,則θθ的結果是:

    θ=(XTX)−1XTYθ=(XTX)−1XTY

2. 回顧Ridge迴歸

    由於直接套用線性迴歸可能產生過擬合,我們需要加入正則化項,如果加入的是L2正則化項,就是Ridge迴歸,有時也翻譯爲脊迴歸。它和一般線性迴歸的區別是在損失函數上增加了一個L2正則化的項,和一個調節線性迴歸項和正則化項權重的係數αα。損失函數表達式如下:

    J(θ)=12(Xθ−Y)T(Xθ−Y)+12α||θ||22J(θ)=12(Xθ−Y)T(Xθ−Y)+12α||θ||22

    其中αα爲常數係數,需要進行調優。||θ||2||θ||2爲L2範數。

    Ridge迴歸的解法和一般線性迴歸大同小異。如果採用梯度下降法,則每一輪θθ迭代的表達式是:

    θ=θ−(βXT(Xθ−Y)+αθ)θ=θ−(βXT(Xθ−Y)+αθ)

    其中ββ爲步長。

    如果用最小二乘法,則θθ的結果是:

    θ=(XTX+αE)−1XTYθ=(XTX+αE)−1XTY 

    其中E爲單位矩陣。

    Ridge迴歸在不拋棄任何一個變量的情況下,縮小了迴歸係數,使得模型相對而言比較的穩定,但這會使得模型的變量特別多,模型解釋性差。有沒有折中一點的辦法呢?即又可以防止過擬合,同時克服Ridge迴歸

模型變量多的缺點呢?有,這就是下面說的Lasso迴歸。

3. 初識Lasso迴歸 

    Lasso迴歸有時也叫做線性迴歸的L1正則化,和Ridge迴歸的主要區別就是在正則化項,Ridge迴歸用的是L2正則化,而Lasso迴歸用的是L1正則化。Lasso迴歸的損失函數表達式如下: 

    J(θ)=12n(Xθ−Y)T(Xθ−Y)+α||θ||1J(θ)=12n(Xθ−Y)T(Xθ−Y)+α||θ||1

    其中n爲樣本個數,αα爲常數係數,需要進行調優。||θ||1||θ||1爲L1範數。   

    Lasso迴歸使得一些係數變小,甚至還是一些絕對值較小的係數直接變爲0,因此特別適用於參數數目縮減與參數的選擇,因而用來估計稀疏參數的線性模型。

 

    但是Lasso迴歸有一個很大的問題,導致我們需要把它單獨拎出來講,就是它的損失函數不是連續可導的,由於L1範數用的是絕對值之和,導致損失函數有不可導的點。也就是說,我們的最小二乘法,梯度下降法,牛頓法與擬牛頓法對它統統失效了。那我們怎麼才能求有這個L1範數的損失函數極小值呢?

 

    OK,本章主角,兩種全新的求極值解法座標軸下降法(coordinate descent)和最小角迴歸法( Least Angle Regression, LARS)該隆重出場了。          

4. 用座標軸下降法求解Lasso迴歸

    座標軸下降法顧名思義,是沿着座標軸的方向去下降,這和梯度下降不同。梯度下降是沿着梯度的負方向下降。不過梯度下降和座標軸下降的共性就都是迭代法,通過啓發式的方式一步步迭代求解函數的最小值。

    座標軸下降法的數學依據主要是這個結論(此處不做證明):一個可微的凸函數J(θ)J(θ), 其中θθ是nx1的向量,即有n個維度。如果在某一點θ¯¯¯θ¯,使得J(θ)J(θ)在每一個座標軸θ¯¯¯iθ¯i(i = 1,2,...n)上都是最小值,那麼J(θ¯¯¯i)J(θ¯i)就是一個全局的最小值。

    於是我們的優化目標就是在θθ的n個座標軸上(或者說向量的方向上)對損失函數做迭代的下降,當所有的座標軸上的θiθi(i = 1,2,...n)都達到收斂時,我們的損失函數最小,此時的θθ即爲我們要求的結果。

    下面我們看看具體的算法過程:

    1. 首先,我們把θθ向量隨機取一個初值。記爲θ(0)θ(0) ,上面的括號裏面的數字代表我們迭代的輪數,當前初始輪數爲0.

    2. 對於第k輪的迭代。我們從θ(k)1θ1(k)開始,到θ(k)nθn(k)爲止,依次求θ(k)iθi(k)。θ(k)iθi(k)的表達式如下:

    θ(k)i∈argminθiJ(θ(k)1,θ(k)2,...θ(k)i−1,θi,θ(k−1)i+1,...,θ(k−1)n)θi(k)∈argmin⏟θiJ(θ1(k),θ2(k),...θi−1(k),θi,θi+1(k−1),...,θn(k−1)) 

    也就是說θ(k)iθi(k)是使J(θ(k)1,θ(k)2,...θ(k)i−1,θi,θ(k−1)i+1,...,θ(k−1)n)J(θ1(k),θ2(k),...θi−1(k),θi,θi+1(k−1),...,θn(k−1))最小化時候的θiθi的值。此時J(θ)J(θ)只有θ(k)iθi(k)是變量,其餘均爲常量,因此最小值容易通過求導求得。

    如果上面這個式子不好理解,我們具體一點,在第k輪,θθ向量的n個維度的迭代式如下:

    θ(k)1∈argminθ1J(θ1,θ(k−1)2,...,θ(k−1)n)θ1(k)∈argmin⏟θ1J(θ1,θ2(k−1),...,θn(k−1)) 

    θ(k)2∈argminθ2J(θ(k)1,θ2,θ(k−1)3...,θ(k−1)n)θ2(k)∈argmin⏟θ2J(θ1(k),θ2,θ3(k−1)...,θn(k−1)) 

    ...

    θ(k)n∈argminθnJ(θ(k)1,θ(k)2,...,θ(k)n−1,θn)θn(k)∈argmin⏟θnJ(θ1(k),θ2(k),...,θn−1(k),θn) 

    3. 檢查θ(k)θ(k)向量和θ(k−1)θ(k−1)向量在各個維度上的變化情況,如果在所有維度上變化都足夠小,那麼θ(k)θ(k)即爲最終結果,否則轉入2,繼續第k+1輪的迭代。

    以上就是座標軸下降法的求極值過程,可以和梯度下降做一個比較:

    a) 座標軸下降法在每次迭代中在當前點處沿一個座標方向進行一維搜索 ,固定其他的座標方向,找到一個函數的局部極小值。而梯度下降總是沿着梯度的負方向求函數的局部最小值。

    b) 座標軸下降優化方法是一種非梯度優化算法。在整個過程中依次循環使用不同的座標方向進行迭代,一個週期的一維搜索迭代過程相當於一個梯度下降的迭代。

    c) 梯度下降是利用目標函數的導數來確定搜索方向的,該梯度方向可能不與任何座標軸平行。而座標軸下降法法是利用當前座標方向進行搜索,不需要求目標函數的導數,只按照某一座標方向進行搜索最小值。

    d) 兩者都是迭代方法,且每一輪迭代,都需要O(mn)的計算量(m爲樣本數,n爲係數向量的維度)

5. 用最小角迴歸法求解Lasso迴歸

    第四節介紹了座標軸下降法求解Lasso迴歸的方法,此處再介紹另一種常用方法, 最小角迴歸法(Least Angle Regression, LARS)。

    在介紹最小角迴歸前,我們先看看兩個預備算法,好吧,這個算法真沒有那麼好講。

5.1 前向選擇(Forward Selection)算法

    第一個預備算法是前向選擇(Forward Selection)算法。

    前向選擇算法的原理是是一種典型的貪心算法。要解決的問題是對於:

    Y=XθY=Xθ這樣的線性關係,如何求解係數向量θθ的問題。其中YY爲 mx1的向量,XX爲mxn的矩陣,θθ爲nx1的向量。m爲樣本數量,n爲特徵維度。

    把 矩陣XX看做n個mx1的向量XiXi(i=1,2,...n),在YY的XX變量XiXi(i =1,2,...m)中,選擇和目標YY最爲接近(餘弦距離最大)的一個變量XkXk,用XkXk來逼近YY,得到下式:

    Y¯¯¯¯=XkθkY¯=Xkθk

    其中: θk=<Xk,Y>||Xk||2θk=<Xk,Y>||Xk||2

    即:Y¯¯¯¯Y¯ 是 YY在 XkXk上的投影。那麼,可以定義殘差(residual):   Yyes=Y−Y¯¯¯¯Yyes=Y−Y¯。由於是投影,所以很容易知道 Yyes和XkYyes和Xk是正交的。再以YyesYyes爲新的因變量,去掉XkXk後,剩下的自變量的集合XiXi,i=1,2,3...k−1,k+1,...n}爲新的自變量集合,重複剛纔投影和殘差的操作,直到殘差爲0,或者所有的自變量都用完了,才停止算法。

    當XX只有2維時,例子如上圖,和YY最接近的是X1X1,首先在X1X1上面投影,殘差如上圖長虛線。此時X1θ1X1θ1模擬了YY,θ1θ1模擬了θθ(僅僅模擬了一個維度)。接着發現最接近的是X2X2,此時用殘差接着在X2X2投影,殘差如圖中短虛線。由於沒有其他自變量了,此時X1θ1+X2θ2X1θ1+X2θ2模擬了YY,對應的模擬了兩個維度的θθ即爲最終結果,此處θθ計算設計較多矩陣運算,這裏不討論。

    此算法對每個變量只需要執行一次操作,效率高,速度快。但也容易看出,當自變量不是正交的時候,由於每次都是在做投影,所有算法只能給出一個局部近似解。因此,這個簡單的算法太粗糙,還不能直接用於我們的Lasso迴歸。

 

5.2 前向梯度(Forward Stagewise)算法

    第二個預備算法是前向梯度(Forward Stagewise)算法。

    前向梯度算法和前向選擇算法有類似的地方,也是在YY的XX變量XiXi(i =1,2,...n)中,選擇和目標YY最爲接近(餘弦距離最大)的一個變量XkXk,用XkXk來逼近YY,但是前向梯度算法不是粗暴的用投影,而是每次在最爲接近的自變量XtXt的方向移動一小步,然後再看殘差YyesYyes和哪個XiXi(i =1,2,...n)最爲接近。此時我們也不會把XtXt 去除,因爲我們只是前進了一小步,有可能下面最接近的自變量還是XtXt。如此進行下去,直到殘差YyesYyes減小到足夠小,算法停止。

    

    當XX只有2維時,例子如上圖,和YY最接近的是X1X1,首先在X1X1上面走一小段距離,此處εε爲一個較小的常量,發現此時的殘差還是和\X1X1最接近。那麼接着沿X1X1走,一直走到發現殘差不是和X1X1最接近,而是和X2X2最接近,此時殘差如上圖長虛線。接着沿着X2X2走一小步,發現殘差此時又和X1X1最接近,那麼開始沿着X1X1走,走完一步後發現殘差爲0,那麼算法停止。此時YY由剛纔所有的所有步相加而模擬,對應的算出的係數θθ即爲最終結果。此處θθ計算設計較多矩陣運算,這裏不討論。

    當算法在εε很小的時候,可以很精確的給出最優解,當然,其計算的迭代次數也是大大的增加。和前向選擇算法相比,前向梯度算法更加精確,但是更加複雜。

    有沒有折中的辦法可以綜合前向梯度算法和前向選擇算法的優點,做一個折中呢?有!這就是終於要出場的最小角迴歸法。

5.3  最小角迴歸(Least Angle Regression, LARS)算法

    好吧,最小角迴歸(Least Angle Regression, LARS)算法終於出場了。最小角迴歸法對前向梯度算法和前向選擇算法做了折中,保留了前向梯度算法一定程度的精確性,同時簡化了前向梯度算法一步步迭代的過程。具體算法是這樣的: 

    首先,還是找到與因變量YY最接近或者相關度最高的自變量XkXk,使用類似於前向梯度算法中的殘差計算方法,得到新的目標YyesYyes,此時不用和前向梯度算法一樣小步小步的走。而是直接向前走直到出現一個XtXt,使得XtXt和YyesYyes的相關度和XkXk與YyesYyes的相關度是一樣的,此時殘差YyesYyes就在XtXt和XkXk的角平分線方向上,此時我們開始沿着這個殘差角平分線走,直到出現第三個特徵XpXp和YyesYyes的相關度足夠大的時候,即XpXp到當前殘差YyesYyes的相關度和θtθt,θkθk與YyesYyes的一樣。將其也叫入到YY的逼近特徵集合中,並用YY的逼近特徵集合的共同角分線,作爲新的逼近方向。以此循環,直到YyesYyes足夠的小,或者說所有的變量都已經取完了,算法停止。此時對應的係數θθ即爲最終結果。

 

    當θθ只有2維時,例子如上圖,和YY最接近的是X1X1,首先在X1X1上面走一段距離,一直到殘差在X1X1和X2X2的角平分線上,此時沿着角平分線走,直到殘差最夠小時停止,此時對應的係數ββ即爲最終結果。此處θθ計算設計較多矩陣運算,這裏不討論。

    最小角迴歸法是一個適用於高維數據的迴歸算法,其主要的優點有:

    1)特別適合於特徵維度n 遠高於樣本數m的情況。

    2)算法的最壞計算複雜度和最小二乘法類似,但是其計算速度幾乎和前向選擇算法一樣

    3)可以產生分段線性結果的完整路徑,這在模型的交叉驗證中極爲有用

    主要的缺點是:

    由於LARS的迭代方向是根據目標的殘差而定,所以該算法對樣本的噪聲極爲敏感。

6. 總結

    Lasso迴歸是在ridge迴歸的基礎上發展起來的,如果模型的特徵非常多,需要壓縮,那麼Lasso迴歸是很好的選擇。一般的情況下,普通的線性迴歸模型就夠了。

    另外,本文對最小角迴歸法怎麼求具體的θθ參數值沒有提及,僅僅涉及了原理,如果對具體的算計推導有興趣,可以參考Bradley Efron的論文《Least Angle Regression》,網上很容易找到。  

 

轉載:https://www.cnblogs.com/pinard/p/6018889.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章