scikit-learn對於線性迴歸提供了比較多的類庫,這些類庫都可以用來做線性迴歸分析,本文就對這些類庫的使用做一個總結,重點講述這些線性迴歸算法庫的不同和各自的使用場景。
線性迴歸的目的是要得到輸出向量
爲了得到線性迴歸係數
1. LinearRegression
損失函數:
LinearRegression類就是我們平時說的最常見普通的線性迴歸,它的損失函數也是最簡單的,如下:
損失函數的優化方法:
對於這個損失函數,一般有梯度下降法和最小二乘法兩種極小化損失函數的優化方法,而scikit中的LinearRegression類用的是最小二乘法。通過最小二乘法,可以解出線性迴歸係數
驗證方法:
LinearRegression類並沒有用到交叉驗證之類的驗證方法,需要我們自己把數據集分成訓練集和測試集,然後訓練優化。
使用場景:
一般來說,只要我們覺得數據有線性關係,LinearRegression類是我們的首先。如果發現擬合或者預測的不好,再考慮用其他的線性迴歸庫。如果是學習線性迴歸,推薦先從這個類開始第一步的研究。
2. Ridge
損失函數:
由於第一節的LinearRegression沒有考慮過擬合的問題,有可能泛化能力較差,這時損失函數可以加入正則化項,如果加入的是L2範數的正則化項,這就是Ridge迴歸。損失函數如下:
其中
Ridge迴歸在不拋棄任何一個特徵的情況下,縮小了迴歸係數,使得模型相對而言比較的穩定,不至於過擬合。
損失函數的優化方法:
對於這個損失函數,一般有梯度下降法和最小二乘法兩種極小化損失函數的優化方法,而scikit中的Ridge類用的是最小二乘法。通過最小二乘法,可以解出線性迴歸係數
其中E爲單位矩陣。
驗證方法:
Ridge類並沒有用到交叉驗證之類的驗證方法,需要我們自己把數據集分成訓練集和測試集,需要自己設置好超參數
使用場景:
一般來說,只要我們覺得數據有線性關係,用LinearRegression類擬合的不是特別好,需要正則化,可以考慮用Ridge類。但是這個類最大的缺點是每次我們要自己指定一個超參數
3. RidgeCV
RidgeCV類的損失函數和損失函數的優化方法完全與Ridge類相同,區別在於驗證方法。
驗證方法:
RidgeCV類對超參數
使用場景:
一般來說,只要我們覺得數據有線性關係,用LinearRegression類擬合的不是特別好,需要正則化,可以考慮用RidgeCV類。不是爲了學習的話就不用Ridge類。爲什麼這裏只是考慮用RidgeCV類呢?因爲線性迴歸正則化有很多的變種,Ridge只是其中的一種。所以可能需要比選。如果輸入特徵的維度很高,而且是稀疏線性關係的話,RidgeCV類就不合適了。這時應該主要考慮下面幾節要講到的Lasso迴歸類家族。
4. Lasso
損失函數:
線性迴歸的L1正則化通常稱爲Lasso迴歸,它和Ridge迴歸的區別是在損失函數上增加了的是L1正則化的項,而不是L2正則化項。L1正則化的項也有一個常數係數
其中n爲樣本個數,
Lasso迴歸可以使得一些特徵的係數變小,甚至還是一些絕對值較小的係數直接變爲0。增強模型的泛化能力。
損失函數的優化方法:
Lasso迴歸的損失函數優化方法常用的有兩種,座標軸下降法和最小角迴歸法。Lasso類採用的是座標軸下降法,後面講到的LassoLars類採用的是最小角迴歸法
驗證方法:
Lasso類並沒有用到交叉驗證之類的驗證方法,和Ridge類類似。需要我們自己把數據集分成訓練集和測試集,需要自己設置好超參數
使用場景:
一般來說,對於高維的特徵數據,尤其線性關係是稀疏的,我們會採用Lasso迴歸。或者是要在一堆特徵裏面找出主要的特徵,那麼Lasso迴歸更是首選了。但是Lasso類需要自己對
5. LassoCV
LassoCV類的損失函數和損失函數的優化方法完全與Lasso類相同,區別在於驗證方法。
驗證方法:
LassoCV類對超參數
使用場景:
LassoCV類是進行Lasso迴歸的首選。當我們面臨在一堆高位特徵中找出主要特徵時,LassoCV類更是必選。當面對稀疏線性關係時,LassoCV也很好用。
6. LassoLars
LassoLars類的損失函數和驗證方法與Lasso類相同,區別在於損失函數的優化方法。
損失函數的優化方法:
Lasso迴歸的損失函數優化方法常用的有兩種,座標軸下降法和最小角迴歸法。LassoLars類採用的是最小角迴歸法,前面講到的Lasso類採用的是座標軸下降法。
使用場景:
LassoLars類需要自己對
7. LassoLarsCV
LassoLarsCV類的損失函數和損失函數的優化方法完全與LassoLars類相同,區別在於驗證方法。
驗證方法:
LassoLarsCV類對超參數
使用場景:
LassoLarsCV類是進行Lasso迴歸的第二選擇。第一選擇是前面講到LassoCV類。那麼LassoLarsCV類有沒有適用的場景呢?換句話說,用最小角迴歸法什麼時候比座標軸下降法好呢?場景一:如果我們想探索超參數
8. LassoLarsIC
LassoLarsIC類的損失函數和損失函數的優化方法完全與LassoLarsCV類相同,區別在於驗證方法。
驗證方法:
LassoLarsIC類對超參數
使用場景:
從驗證方法可以看出,驗證
9. ElasticNet
損失函數:
ElasticNet可以看做Lasso和Ridge的中庸化的產物。它也是對普通的線性迴歸做了正則化,但是它的損失函數既不全是L1的正則化,也不全是L2的正則化,而是用一個權重參數
其中
損失函數的優化方法:
ElasticNet迴歸的損失函數優化方法常用的有兩種,座標軸下降法和最小角迴歸法。ElasticNet類採用的是座標軸下降法。
驗證方法:
ElasticNet類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把數據集分成訓練集和測試集,需要自己設置好超參數
使用場景:
ElasticNet類需要自己對
10. ElasticNetCV
ElasticNetCV類的損失函數和損失函數的優化方法完全與ElasticNet類相同,區別在於驗證方法。
驗證方法:
ElasticNetCV類對超參數
使用場景:
ElasticNetCV類用在我們發現用Lasso迴歸太過(太多特徵被稀疏爲0),而用Ridge迴歸又正則化的不夠(迴歸係數衰減的太慢)的時候。一般不推薦拿到數據就直接就上ElasticNetCV。
11. OrthogonalMatchingPursuit
損失函數:
OrthogonalMatchingPursuit(OMP)算法和普通的線性迴歸損失函數的區別是增加了一個限制項,來限制迴歸係數中非0元素的最大個數。形成了一個全新的損失函數如下:
subject to
損失函數的優化方法:
OrthogonalMatchingPursuit類使用前向選擇算法來優化損失函數。它是最小角迴歸算法的縮水版。雖然精度不如最小角迴歸算法,但是運算速度很快。
驗證方法:
OrthogonalMatchingPursuit類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把數據集分成訓練集和測試集,需要自己選擇限制參數
使用場景:
OrthogonalMatchingPursuit類需要自己選擇
12. OrthogonalMatchingPursuitCV
OrthogonalMatchingPursuitCV類的損失函數和損失函數的優化方法完全與OrthogonalMatchingPursuit類相同,區別在於驗證方法。
驗證方法:
OrthogonalMatchingPursuitCV類使用交叉驗證,在S折交叉驗證中以MSE最小爲標準來選擇最好的
使用場景:
OrthogonalMatchingPursuitCV類通常用在稀疏迴歸係數的特徵選擇上,這點和LassoCV有類似的地方。不過由於它的損失函數優化方法是前向選擇算法,精確度較低,一般情況不是特別推薦用,用LassoCV就夠,除非你對稀疏迴歸係數的精確個數很在意,那可以考慮用OrthogonalMatchingPursuitCV。
13. MultiTaskLasso
從這節到第16節,類裏面都帶有一個“MultiTask”的前綴。不過他不是編程裏面的多線程,而是指多個線性迴歸模型共享樣本特徵,但是有不同的迴歸係數和特徵輸出。具體的線性迴歸模型是
損失函數:
由於這裏是多個線性迴歸一起擬合,所以損失函數和前面的都很不一樣:
其中,
損失函數的優化方法:
MultiTaskLasso類使用座標軸下降法來優化損失函數。
驗證方法:
MultiTaskLasso類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把數據集分成訓練集和測試集,需要自己設置好超參數
使用場景:
MultiTaskLasso類需要自己對
14. MultiTaskLassoCV
MultiTaskLassoCV類的損失函數和損失函數的優化方法完全與MultiTaskLasso類相同,區別在於驗證方法。
驗證方法:
MultiTaskLassoCV類對超參數
使用場景:
MultiTaskLassoCV是多個迴歸模型需要一起共享樣本特徵一起擬合時候的首選。它可以保證選到的特徵每個模型都用到。不會出現某個模型選到了某特徵而另一個模型沒選到這個特徵的情況。
15. MultiTaskElasticNet
損失函數:
MultiTaskElasticNet類和MultiTaskLasso類的模型是相同的。不過損失函數不同。損失函數表達式如下:
其中,
損失函數的優化方法:
MultiTaskElasticNet類使用座標軸下降法來優化損失函數。
驗證方法:
MultiTaskElasticNet類並沒有用到交叉驗證之類的驗證方法,和Lasso類類似。需要我們自己把數據集分成訓練集和測試集,需要自己設置好超參數
使用場景:
MultiTaskElasticNet類需要自己對
16. MultiTaskElasticNetCV
MultiTaskElasticNetCV類的損失函數和損失函數的優化方法完全與MultiTaskElasticNet類相同,區別在於驗證方法。
驗證方法:
MultiTaskElasticNetCV類對超參數
使用場景:
MultiTaskElasticNetCV是多個迴歸模型需要一起共享樣本特徵一起擬合時候的兩個備選之一,首選是MultiTaskLassoCV。如果我們發現用MultiTaskLassoCV時迴歸係數衰減的太快,那麼可以考慮用MultiTaskElasticNetCV。
17. BayesianRidge
第17和18節講的都是貝葉斯迴歸模型。貝葉斯迴歸模型假設先驗概率,似然函數和後驗概率都是正態分佈。先驗概率是假設模型輸出Y是符合均值爲
此處對損失函數即負的最大化邊際似然函數不多討論,不過其形式和Ridge迴歸的損失函數很像,所以也取名BayesianRidge。
使用場景:
如果我們的數據有很多缺失或者矛盾的病態數據,可以考慮BayesianRidge類,它對病態數據魯棒性很高,也不用交叉驗證選擇超參數。但是極大化似然函數的推斷過程比較耗時,一般情況不推薦使用。
18. ARDRegression
ARDRegression和BayesianRidge很像,唯一的區別在於對迴歸係數
ARDRegression也是通過最大化邊際似然函數來估計超參數
使用場景:
如果我們的數據有很多缺失或者矛盾的病態數據,可以考慮BayesianRidge類,如果發現擬合不好,可以換ARDRegression試一試。因爲ARDRegression對迴歸係數先驗分佈的假設沒有BayesianRidge嚴格,某些時候會比BayesianRidge產生更好的後驗結果。
轉載於http://www.cnblogs.com/pinard/p/6026343.html