1. 程式人生 > >skiti-learn線性迴歸演算法庫

skiti-learn線性迴歸演算法庫

線性迴歸的目的是要得到輸出向量Y和輸入特徵X之間的線性關係,求出線性迴歸係數θ,也就是 Y=Xθ。其中Y的維度為mx1,X的維度為mxn,而θ的維度為nx1

  1. LinearRegression
    最常見的普通線性迴歸,損失函式如下:
    J(θ)=1/2 (Xθ−Y)T (Xθ−Y)
    此損失函式一般採用梯度下降法或者最小二乘法優化
    skiti的LinearRegression類中採用的是最小二乘法:
    θ=(XT X)−1 XT Y

  2. Ridge
    嶺迴歸是在普通線性迴歸的基礎上加上了L2正則化:
    J(θ)=1/2 (Xθ−Y)T (Xθ−Y)+1/2 α||θ||²2
    Ridge迴歸在不拋棄任何一個特徵的情況下,縮小了迴歸係數,使得模型相對而言比較的穩定,不至於過擬合。
    此損失函式一般採用梯度下降法或者最小二乘法優化
    skiti的Ridge類中採用的是最小二乘法:
     θ=(XT X+αE)−1 XT Y
    一般來說,只要我們覺得資料有線性關係,用LinearRegression類擬合的不是特別好,需要正則化,可以考慮用Ridge類。不過需要自己制定一個超引數,自己評估超引數的好壞,比較麻煩,RidgeCV類可以解決這一問題。

  3. RidgeCV
    RidgeCV類對超引數α使用了交叉驗證,來幫忙我們選擇一個合適的α。在初始化RidgeCV類時候,我們可以傳一組備選的α值,10個,100個都可以。RidgeCV類會幫我們選擇一個合適的α。免去了我們自己去一輪輪篩選α的苦惱。

  4. Lasso
    Lasso使用了L1正則化,用係數α來調節損失函式的均方差項和正則化項的權重,損失函式如下:
    J(θ)=1/2m (Xθ−Y)T (Xθ−Y)+α||θ||1
    Lasso迴歸可以使得一些特徵的係數變小,甚至還是一些絕對值較小的係數直接變為0。增強模型的泛化能力。
    Lasso迴歸的優化方式一般為座標軸下降法和最小角迴歸法。Lasso採用的是座標軸下降法。
    一般來說,對於高維的特徵資料,尤其線性關係是稀疏的,我們會採用Lasso迴歸。或者是要在一堆特徵裡面找出主要的特徵,那麼Lasso迴歸更是首選了。但是Lasso類需要自己對α調優,所以一般用到的是LassoCV類。

  5. LassoCV
    LassoCV對超引數使用交叉驗證,幫助我們選擇一個合適的超引數。

  6. LassoLars
    與Lasso基本相同,區別在於損失的優化方法。LassoLars類採用的是最小角迴歸法。

  7. LassoLarsCV
    同樣方便LassoLars進行超引數選擇,使用交叉驗證。
    針對座標軸下降法和最小角迴歸法的選擇:
    一:如果我們想探索超引數α更多的相關值的話,由於最小角迴歸可以看到迴歸路徑,此時用LassoLarsCV比較好。二: 如果我們的樣本數遠小於樣本特徵數的話,用LassoLarsCV也比LassoCV好。其餘場景最好用LassoCV。

  8. LassoLarsIC
    損失函式與優化方法與LassoLars相同,區別在於驗證方法。
    LassoLarIC類採用的是而是用 Akaike資訊準則(AIC)和貝葉斯資訊準則(BIC)。此時我們並不需要指定備選的α值,而是由LassoLarsIC類基於AIC和BIC自己選擇。用LassoLarsIC類我們可以一輪找到超引數α,而用K折交叉驗證的話,我們需要K+1輪才能找到。相比之下LassoLarsIC類尋找α更快。
    不過使用LassoLarIC資料必須滿足一定條件,需要對解的自由度做一個適當的估計。該估計是來自大樣本(漸近結果),並假設該模型是正確的(即這些資料確實是由假設的模型產生的)。當待求解的問題的條件數很差的時候(比如特徵個數大於樣本數量的時候),這些準則就會有崩潰的風險。所以除非我們知道資料是來自一個模型確定的大樣本,並且樣本數量夠大,我們才能用LassoLarsIC。而實際上我們得到的資料大部分都不能滿足這個要求。

  9. ElasticNet
    ElasticNet是Ridge和Lasso的一箇中和,做了一個既有L1也含有L2的正則化,通過ρ來平衡L1和L2的比重,損失函式如下:
    J(θ)=1/2m (Xθ−Y)T (Xθ−Y)+αρ||θ||1 +α(1−ρ)/2 ||θ||²2
    由於存在L1正則化無法求導,所以優化方式還是座標軸下降法和最小角迴歸法兩種。ElasticNet採用的是座標軸下降法

  10. ElasticNetCV
    ElasticNetCV對兩個超引數使用了交叉驗證。方便選擇超引數
    ElasticNetCV類用在我們發現用Lasso迴歸太過(太多特徵被稀疏為0),而用Ridge迴歸又正則化的不夠(迴歸係數衰減的太慢)的時候。一般不推薦拿到資料就直接就上ElasticNetCV。

  11. OrthogonalMatchingPursuit
    OrthogonalMatchingPursuit(OMP)演算法和普通的線性迴歸損失函式的區別是增加了一個限制項,來限制迴歸係數中非0元素的最大個數。
    J(θ)=1/2 (Xθ−Y)T (Xθ−Y)
    subject to ||θ||0≤n(non−zero−coefs)
    其中(||θ||0代表θ的L0範數,即非0迴歸係數的個數。)
    OrthogonalMatchingPursuit類使用前向選擇演算法來優化損失函式。它是最小角迴歸演算法的縮水版。雖然精度不如最小角迴歸演算法,但是運算速度很快。
    和之前的演算法類似,OMP需要選擇n(non−zero−coefs)的值。

  12. OrthogonalMatchingPursuitCV
    同樣的,此方法使用交叉驗證,在S折交叉驗證中以MSE最小為標準來選擇最好的n(non−zero−coefs)
    OrthogonalMatchingPursuitCV類通常用在稀疏迴歸係數的特徵選擇上,這點和LassoCV有類似的地方。不過由於它的損失函式優化方法是前向選擇演算法,精確度較低,一般情況不是特別推薦用,用LassoCV就夠,除非你對稀疏迴歸係數的精確個數很在意,那可以考慮用OrthogonalMatchingPursuitCV。

  13. MultiTaskLasso
    針對具體的線性迴歸模型是Y=XW。其中X是mxn維度的矩陣。W為nxk維度的矩陣,Y為mxk維度的矩陣。m為樣本個數,n為樣本特徵,而k就代表多個迴歸模型的個數。所謂的“MultiTask”這裡其實就是指k個線性迴歸的模型一起去擬合。
    J(W)=1/2m (||XW−Y||)²Fro + α||W||21
    其中, (||XW−Y||)Fro是Y=XW的***Frobenius***範數。而||W||21代表W的各列的根平方和之和。
    MultiTaskLasso採用座標軸下降法。

  14. MultiTaskLassoCV
    MultiTaskLassoCV類對超引數α使用了交叉驗證,來幫忙選擇一個合適的α。
    MultiTaskLassoCV是多個迴歸模型需要一起共享樣本特徵一起擬合時候的首選。它可以保證選到的特徵每個模型都用到。不會出現某個模型選到了某特徵而另一個模型沒選到這個特徵的情況。

  15. MulitTaskElasticNet
    MultiTaskElasticNet類和MultiTaskLasso類的模型是相同的。不過損失函式不同。損失函式表示式如下:
    J(W)=1/2m (||XW−Y||)²Fro+αρ||W||21+α(1−ρ)/2(||W||)²Fro
    其中, (||XW−Y||)Fro是Y=XW的Frobenius範數。而||W||21代表W的各列的根平方和之和。
    採用座標軸下降法進行優化

  16. MultiTaskElasticNetCV
    MultiTaskElasticNetCV類對超引數α和 ρ使用了交叉驗證,來幫忙選擇合適的α和ρ。
    MultiTaskElasticNetCV是多個迴歸模型需要一起共享樣本特徵一起擬合時候的兩個備選之一,首選是MultiTaskLassoCV。如果我們發現用MultiTaskLassoCV時迴歸係數衰減的太快,那麼可以考慮用MultiTaskElasticNetCV。

  17. BayesianRidge
    貝葉斯迴歸模型,貝葉斯迴歸模型假設先驗概率,似然函式和後驗概率都是正態分佈。先驗概率是假設模型輸出Y是符合均值為Xθ的正態分佈,正則化引數α被看作是一個需要從資料中估計得到的隨機變數。迴歸係數θ的先驗分佈規律為球形正態分佈,超引數為λ。我們需要通過最大化邊際似然函式來估計超引數α和λ,以及迴歸係數θ。
    如果我們的資料有很多缺失或者矛盾的病態資料,可以考慮BayesianRidge類,它對病態資料魯棒性很高,也不用交叉驗證選擇超引數。但是極大化似然函式的推斷過程比較耗時,一般情況不推薦使用。

  18. ARDRegression
    ARDRegression和BayesianRidge很像,唯一的區別在於對迴歸係數θ的先驗分佈假設。BayesianRidge假設θ的先驗分佈規律為球形正態分佈,而ARDRegression丟掉了BayesianRidge中的球形高斯的假設,採用與座標軸平行的橢圓形高斯分佈。這樣對應的超引數λ有n個維度,各不相同。而上面的BayesianRidge中球形分佈的θ對應的λ只有一個。
    ARDRegression也是通過最大化邊際似然函式來估計超引數α和λ向量,以及迴歸係數θ。
    如果我們的資料有很多缺失或者矛盾的病態資料,可以考慮BayesianRidge類,如果發現擬合不好,可以換ARDRegression試一試。因為ARDRegression對迴歸係數先驗分佈的假設沒有BayesianRidge嚴格,某些時候會比BayesianRidge產生更好的後驗結果。