小編邀請您,先思考:
1 回歸演演算法的道和術分別是什麼?
2 如何應用回歸演演算法?
scikit-learn對於線性回歸提供了比較多的類庫,這些類庫都可以用來做線性回歸分析,本文就對這些類庫的使用做一個總結,重點講述這些線性回歸演演算法庫的不同和各自的使用場景。
線性回歸的目的是要得到輸出向量YY和輸入特徵XX之間的線性關係,求出線性回歸繫數θθ,也就是 Y=XθY=Xθ。其中YY的維度為mx1,XX的維度為mxn,而θθ的維度為nx1。m代表樣本個數,n代表樣本特徵的維度。
為了得到線性回歸繫數θθ,我們需要定義一個損失函式,一個極小化損失函式的最佳化方法,以及一個驗證演演算法的方法。損失函式的不同,損失函式的最佳化方法的不同,驗證方法的不同,就形成了不同的線性回歸演演算法。scikit-learn中的線性回歸演演算法庫可以從這三點找出各自的不同點。理解了這些不同點,對不同的演演算法使用場景也就好理解了。
1. LinearRegression
損失函式:
LinearRegression類就是我們平時說的最常見普通的線性回歸,它的損失函式也是最簡單的,如下:
J(θ)=12(Xθ−Y)T(Xθ−Y)J(θ)=12(Xθ−Y)T(Xθ−Y)
損失函式的最佳化方法:
對於這個損失函式,一般有梯度下降法和最小二乘法兩種極小化損失函式的最佳化方法,而scikit中的LinearRegression類用的是最小二乘法。透過最小二乘法,可以解出線性回歸繫數θθ為:
θ=(XTX)−1XTYθ=(XTX)−1XTY
驗證方法:
LinearRegression類並沒有用到交叉驗證之類的驗證方法,需要我們自己把資料集分成訓練集和測試集,然後訓練最佳化。
使用場景:
一般來說,只要我們覺得資料有線性關係,LinearRegression類是我們的首先。如果發現擬合或者預測的不好,再考慮用其他的線性回歸庫。如果是學習線性回歸,推薦先從這個類開始第一步的研究。
2. Ridge
損失函式:
由於第一節的LinearRegression沒有考慮過擬合的問題,有可能泛化能力較差,這時損失函式可以加入正則化項,如果加入的是L2範數的正則化項,這就是Ridge回歸。損失函式如下:
J(θ)=12(Xθ−Y)T(Xθ−Y)+12α||θ||22J(θ)=12(Xθ−Y)T(Xθ−Y)+12α||θ||22
其中αα為常數繫數,需要進行調優。||θ||2||θ||2為L2範數。
Ridge回歸在不拋棄任何一個特徵的情況下,縮小了回歸繫數,使得模型相對而言比較的穩定,不至於過擬合。
損失函式的最佳化方法:
對於這個損失函式,一般有梯度下降法和最小二乘法兩種極小化損失函式的最佳化方法,而scikit中的Ridge類用的是最小二乘法。透過最小二乘法,可以解出線性回歸繫數θθ為:
θ=(XTX+αE)−1XTYθ=(XTX+αE)−1XTY
其中E為單位矩陣。
驗證方法:
Ridge類並沒有用到交叉驗證之類的驗證方法,需要我們自己把資料集分成訓練集和測試集,需要自己設定好超引數αα。然後訓練最佳化。
使用場景:
一般來說,只要我們覺得資料有線性關係,用LinearRegression類擬合的不是特別好,需要正則化,可以考慮用Ridge類。但是這個類最大的缺點是每次我們要自己指定一個超引數αα,然後自己評估αα的好壞,比較麻煩,一般我都用下一節講到的RidgeCV類來跑Ridge回歸,不推薦直接用這個Ridge類,除非你只是為了學習Ridge回歸。
3. RidgeCV
RidgeCV類的損失函式和損失函式的最佳化方法完全與Ridge類相同,區別在於驗證方法。
驗證方法:
RidgeCV類對超引數αα使用了交叉驗證,來幫忙我們選擇一個合適的αα。在初始化RidgeCV類時候,我們可以傳一組備選的αα值,10個,100個都可以。RidgeCV類會幫我們選擇一個合適的αα。免去了我們自己去一輪輪篩選αα的苦惱。
使用場景:
一般來說,只要我們覺得資料有線性關係,用LinearRegression類擬合的不是特別好,需要正則化,可以考慮用RidgeCV類。不是為了學習的話就不用Ridge類。為什麼這裡只是考慮用RidgeCV類呢?因為線性回歸正則化有很多的變種,Ridge只是其中的一種。所以可能需要比選。如果輸入特徵的維度很高,而且是稀疏線性關係的話,RidgeCV類就不合適了。這時應該主要考慮下麵幾節要講到的Lasso回歸類家族。
4. Lasso
損失函式:
線性回歸的L1正則化通常稱為Lasso回歸,它和Ridge回歸的區別是在損失函式上增加了的是L1正則化的項,而不是L2正則化項。L1正則化的項也有一個常數繫數αα來調節損失函式的均方差項和正則化項的權重,具體Lasso回歸的損失函式運算式如下:
J(θ)=12m(Xθ−Y)T(Xθ−Y)+α||θ||1J(θ)=12m(Xθ−Y)T(Xθ−Y)+α||θ||1
其中n為樣本個數,αα為常數繫數,需要進行調優。||θ||1||θ||1為L1範數。
Lasso回歸可以使得一些特徵的繫數變小,甚至還是一些絕對值較小的繫數直接變為0。增強模型的泛化能力。
損失函式的最佳化方法:
Lasso回歸的損失函式最佳化方法常用的有兩種,坐標軸下降法和最小角回歸法。Lasso類採用的是坐標軸下降法,後面講到的LassoLars類採用的是最小角回歸法
驗證方法:
Lasso類並沒有用到交叉驗證之類的驗證方法,和Ridge類類似。需要我們自己把資料集分成訓練集和測試集,需要自己設定好超引數αα。然後訓練最佳化。
使用場景:
一般來說,對於高維的特徵資料,尤其線性關係是稀疏的,我們會採用Lasso回歸。或者是要在一堆特徵裡面找出主要的特徵,那麼Lasso回歸更是首選了。但是Lasso類需要自己對αα調優,所以不是Lasso回歸的首選,一般用到的是下一節要講的LassoCV類。
5. LassoCV
LassoCV類的損失函式和損失函式的最佳化方法完全與Lasso類相同,區別在於驗證方法。
驗證方法:
LassoCV類對超引數αα使用了交叉驗證,來幫忙我們選擇一個合適的αα。在初始化LassoCV類時候,我們可以傳一組備選的αα值,10個,100個都可以。LassoCV類會幫我們選擇一個合適的αα。免去了我們自己去一輪輪篩選αα的苦惱。
使用場景:
LassoCV類是進行Lasso回歸的首選。當我們面臨在一堆高位特徵中找出主要特徵時,LassoCV類更是必選。當面對稀疏線性關係時,LassoCV也很好用。
6. LassoLars
LassoLars類的損失函式和驗證方法與Lasso類相同,區別在於損失函式的最佳化方法。
損失函式的最佳化方法:
Lasso回歸的損失函式最佳化方法常用的有兩種,坐標軸下降法和最小角回歸法。LassoLars類採用的是最小角回歸法,前面講到的Lasso類採用的是坐標軸下降法。
使用場景:
LassoLars類需要自己對αα調優,所以不是Lasso回歸的首選,一般用到的是下一節要講的LassoLarsCV類。
7. LassoLarsCV
LassoLarsCV類的損失函式和損失函式的最佳化方法完全與LassoLars類相同,區別在於驗證方法。
驗證方法:
LassoLarsCV類對超引數αα使用了交叉驗證,來幫忙我們選擇一個合適的αα。在初始化LassoLarsCV類時候,我們可以傳一組備選的αα值,10個,100個都可以。LassoLarsCV類會幫我們選擇一個合適的αα。免去了我們自己去一輪輪篩選αα的苦惱。
使用場景:
LassoLarsCV類是進行Lasso回歸的第二選擇。第一選擇是前面講到LassoCV類。那麼LassoLarsCV類有沒有適用的場景呢?換句話說,用最小角回歸法什麼時候比坐標軸下降法好呢?場景一:如果我們想探索超引數αα更多的相關值的話,由於最小角回歸可以看到回歸路徑,此時用LassoLarsCV比較好。場景二: 如果我們的樣本數遠小於樣本特徵數的話,用LassoLarsCV也比LassoCV好。其餘場景最好用LassoCV。
8. LassoLarsIC
LassoLarsIC類的損失函式和損失函式的最佳化方法完全與LassoLarsCV類相同,區別在於驗證方法。
驗證方法:
LassoLarsIC類對超引數αα沒有使用交叉驗證,而是用 Akaike資訊準則(AIC)和貝葉斯資訊準則(BIC)。此時我們並不需要指定備選的αα值,而是由LassoLarsIC類基於AIC和BIC自己選擇。用LassoLarsIC類我們可以一輪找到超引數αα,而用K折交叉驗證的話,我們需要K+1輪才能找到。相比之下LassoLarsIC類尋找αα更快。
使用場景:
從驗證方法可以看出,驗證ααLassoLarsIC比LassoLarsCV快很多。那麼是不是LassoLarsIC類一定比LassoLarsCV類好呢? 不一定!由於使用了AIC和BIC準則,我們的資料必須滿足一定的條件才能用LassoLarsIC類。這樣的準則需要對解的自由度做一個適當的估計。該估計是來自大樣本(漸近結果),並假設該模型是正確的(即這些資料確實是由假設的模型產生的)。當待求解的問題的條件數很差的時候(比如特徵個數大於樣本數量的時候),這些準則就會有崩潰的風險。所以除非我們知道資料是來自一個模型確定的大樣本,並且樣本數量夠大,我們才能用LassoLarsIC。而實際上我們得到的資料大部分都不能滿足這個要求,實際應用中我沒有用到過這個看上去很美的類。
9. ElasticNet
損失函式:
ElasticNet可以看做Lasso和Ridge的中庸化的產物。它也是對普通的線性回歸做了正則化,但是它的損失函式既不全是L1的正則化,也不全是L2的正則化,而是用一個權重引數ρρ來平衡L1和L2正則化的比重,形成了一個全新的損失函式如下:
J(θ)=12m(Xθ−Y)T(Xθ−Y)+αρ||θ||1+α(1−ρ)2||θ||22J(θ)=12m(Xθ−Y)T(Xθ−Y)+αρ||θ||1+α(1−ρ)2||θ||22
其中αα為正則化超引數,ρρ為範數權重超引數。
損失函式的最佳化方法:
ElasticNet回歸的損失函式最佳化方法常用的有兩種,坐標軸下降法和最小角回歸法。ElasticNet類採用的是坐標軸下降法。
驗證方法:
ElasticNet類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把資料集分成訓練集和測試集,需要自己設定好超引數αα和ρρ。然後訓練最佳化。
使用場景:
ElasticNet類需要自己對αα和ρρ調優,所以不是ElasticNet回歸的首選,一般用到的是下一節要講的ElasticNetCV類。
10. ElasticNetCV
ElasticNetCV類的損失函式和損失函式的最佳化方法完全與ElasticNet類相同,區別在於驗證方法。
驗證方法:
ElasticNetCV類對超引數αα和 ρρ使用了交叉驗證,來幫忙我們選擇合適的αα和ρρ。在初始化ElasticNetCV類時候,我們可以傳一組備選的αα值和ρρ,10個,100個都可以。ElasticNetCV類會幫我們選擇一個合適的αα和ρρ。免去了我們自己去一輪輪篩選αα和ρρ的苦惱。
使用場景:
ElasticNetCV類用在我們發現用Lasso回歸太過(太多特徵被稀疏為0),而用Ridge回歸又正則化的不夠(回歸繫數衰減的太慢)的時候。一般不推薦拿到資料就直接就上ElasticNetCV。
11. OrthogonalMatchingPursuit
損失函式:
OrthogonalMatchingPursuit(OMP)演演算法和普通的線性回歸損失函式的區別是增加了一個限制項,來限制回歸繫數中非0元素的最大個數。形成了一個全新的損失函式如下:
J(θ)=12(Xθ−Y)T(Xθ−Y)J(θ)=12(Xθ−Y)T(Xθ−Y)
subject to ||θ||0≤nnon−zero−coefs||θ||0≤nnon−zero−coefs ,其中(||θ||0(||θ||0代表θθ的L0範數,即非0回歸繫數的個數。
損失函式的最佳化方法:
OrthogonalMatchingPursuit類使用前向選擇演演算法來最佳化損失函式。它是最小角回歸演演算法的縮水版。雖然精度不如最小角回歸演演算法,但是運算速度很快。
驗證方法:
OrthogonalMatchingPursuit類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把資料集分成訓練集和測試集,需要自己選擇限制引數nnon−zero−coefsnnon−zero−coefs。然後訓練最佳化。
使用場景:
OrthogonalMatchingPursuit類需要自己選擇nnon−zero−coefsnnon−zero−coefs,所以不是OrthogonalMatchingPursuit回歸的首選,一般用到的是下一節要講的OrthogonalMatchingPursuitCV類,不過如果你已經定好了nnon−zero−coefsnnon−zero−coefs的值,那用OrthogonalMatchingPursuit比較方便。
12. OrthogonalMatchingPursuitCV
OrthogonalMatchingPursuitCV類的損失函式和損失函式的最佳化方法完全與OrthogonalMatchingPursuit類相同,區別在於驗證方法。
驗證方法:
OrthogonalMatchingPursuitCV類使用交叉驗證,在S折交叉驗證中以MSE最小為標準來選擇最好的nnon−zero−coefsnnon−zero−coefs。
使用場景:
OrthogonalMatchingPursuitCV類通常用在稀疏回歸繫數的特徵選擇上,這點和LassoCV有類似的地方。不過由於它的損失函式最佳化方法是前向選擇演演算法,精確度較低,一般情況不是特別推薦用,用LassoCV就夠,除非你對稀疏回歸繫數的精確個數很在意,那可以考慮用OrthogonalMatchingPursuitCV。
13. MultiTaskLasso
從這節到第16節,類裡面都帶有一個“MultiTask”的字首。不過他不是程式設計裡面的多執行緒,而是指多個線性回歸模型共享樣本特徵,但是有不同的回歸繫數和特徵輸出。具體的線性回歸模型是Y=XWY=XW。其中X是mxn維度的矩陣。W為nxk維度的矩陣,Y為mxk維度的矩陣。m為樣本個數,n為樣本特徵,而k就代表多個回歸模型的個數。所謂的“MultiTask”這裡其實就是指k個線性回歸的模型一起去擬合。
損失函式:
由於這裡是多個線性回歸一起擬合,所以損失函式和前面的都很不一樣:
J(W)=12m(||XW−Y||)2Fro+α||W||21J(W)=12m(||XW−Y||)Fro2+α||W||21
其中, (||XW−Y||)Fro(||XW−Y||)Fro是Y=XWY=XW的Frobenius範數。而||W||21||W||21代表W的各列的根平方和之和。
損失函式的最佳化方法:
MultiTaskLasso類使用坐標軸下降法來最佳化損失函式。
驗證方法:
MultiTaskLasso類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把資料集分成訓練集和測試集,需要自己設定好超引數αα。然後訓練最佳化。
使用場景:
MultiTaskLasso類需要自己對αα調優,所以不是共享特徵協同回歸的首選,一般用到的是下一節要講的MultiTaskLassoCV類。
14. MultiTaskLassoCV
MultiTaskLassoCV類的損失函式和損失函式的最佳化方法完全與MultiTaskLasso類相同,區別在於驗證方法。
驗證方法:
MultiTaskLassoCV類對超引數αα使用了交叉驗證,來幫忙我們選擇一個合適的αα。在初始化LassoLarsCV類時候,我們可以傳一組備選的αα值,10個,100個都可以。MultiTaskLassoCV類會幫我們選擇一個合適的αα。
使用場景:
MultiTaskLassoCV是多個回歸模型需要一起共享樣本特徵一起擬合時候的首選。它可以保證選到的特徵每個模型都用到。不會出現某個模型選到了某特徵而另一個模型沒選到這個特徵的情況。
15. MultiTaskElasticNet
損失函式:
MultiTaskElasticNet類和MultiTaskLasso類的模型是相同的。不過損失函式不同。損失函式運算式如下:
J(W)=12m(||XW−Y||)2Fro+αρ||W||21+α(1−ρ)2(||W||)2FroJ(W)=12m(||XW−Y||)Fro2+αρ||W||21+α(1−ρ)2(||W||)Fro2
其中, (||XW−Y||)Fro(||XW−Y||)Fro是Y=XWY=XW的Frobenius範數。而||W||21||W||21代表W的各列的根平方和之和。
損失函式的最佳化方法:
MultiTaskElasticNet類使用坐標軸下降法來最佳化損失函式。
驗證方法:
MultiTaskElasticNet類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把資料集分成訓練集和測試集,需要自己設定好超引數αα和ρρ。然後訓練最佳化。
使用場景:
MultiTaskElasticNet類需要自己對αα調優,所以不是共享特徵協同回歸的首選,如果需要用MultiTaskElasticNet,一般用到的是下一節要講的MultiTaskElasticNetCV類。
16. MultiTaskElasticNetCV
MultiTaskElasticNetCV類的損失函式和損失函式的最佳化方法完全與MultiTaskElasticNet類相同,區別在於驗證方法。
驗證方法:
MultiTaskElasticNetCV類對超引數αα和 ρρ使用了交叉驗證,來幫忙我們選擇合適的αα和ρρ。在初始化MultiTaskElasticNetCV類時候,我們可以傳一組備選的αα值和ρρ,10個,100個都可以。ElasticNetCV類會幫我們選擇一個合適的αα和ρρ。免去了我們自己去一輪輪篩選αα和ρρ的苦惱。
使用場景:
MultiTaskElasticNetCV是多個回歸模型需要一起共享樣本特徵一起擬合時候的兩個備選之一,首選是MultiTaskLassoCV。如果我們發現用MultiTaskLassoCV時回歸繫數衰減的太快,那麼可以考慮用MultiTaskElasticNetCV。
17. BayesianRidge
第17和18節講的都是貝葉斯回歸模型。貝葉斯回歸模型假設先驗機率,似然函式和後驗機率都是正態分佈。先驗機率是假設模型輸出Y是符合均值為XθXθ的正態分佈,正則化引數αα被看作是一個需要從資料中估計得到的隨機變數。回歸繫數θθ的先驗分佈規律為球形正態分佈,超引數為λλ。我們需要透過最大化邊際似然函式來估計超引數αα和λλ,以及回歸繫數θθ。
此處對損失函式即負的最大化邊際似然函式不多討論,不過其形式和Ridge回歸的損失函式很像,所以也取名BayesianRidge。
使用場景:
如果我們的資料有很多缺失或者矛盾的病態資料,可以考慮BayesianRidge類,它對病態資料魯棒性很高,也不用交叉驗證選擇超引數。但是極大化似然函式的推斷過程比較耗時,但一般情況不推薦使用。
18. ARDRegression
ARDRegression和BayesianRidge很像,唯一的區別在於對回歸繫數θθ的先驗分佈假設。BayesianRidge假設θθ的先驗分佈規律為球形正態分佈,而ARDRegression丟掉了BayesianRidge中的球形高斯的假設,採用與坐標軸平行的橢圓形高斯分佈。這樣對應的超引數λλ有n個維度,各不相同。而上面的BayesianRidge中球形分佈的θθ對應的λλ只有一個。
ARDRegression也是透過最大化邊際似然函式來估計超引數αα和λλ向量,以及回歸繫數θθ。
使用場景:
如果我們的資料有很多缺失或者矛盾的病態資料,可以考慮BayesianRidge類,如果發現擬合不好,可以換ARDRegression試一試。因為ARDRegression對回歸繫數先驗分佈的假設沒有BayesianRidge嚴格,某些時候會比BayesianRidge產生更好的後驗結果。
以上就是scikit-learn中線性回歸的一個總結,希望可以幫到朋友們。
親愛的讀者朋友們,您們有什麼想法,請點選【寫留言】按鈕,寫下您的留言。
資料人網(http://shujuren.org)誠邀各位資料人來平臺分享和傳播優質資料知識。
公眾號推薦:
360區塊鏈,專註於360度分享區塊鏈內容。
好又樂書屋,專註分享有思想的人物,身心健康,自我教育,閱讀寫作和有趣味的生活等內容,傳播正能量。
閱讀原文,更多精彩!
分享是收穫,傳播是價值!