日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言线性分类回归库 台湾,最全的线性回归算法库总结—— scikit-learn篇

發布時間:2024/9/27 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言线性分类回归库 台湾,最全的线性回归算法库总结—— scikit-learn篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:最全的線性回歸算法庫總結—— scikit-learn篇

本文建議收藏后食用更加美味

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中線性回歸的一個總結,希望可以幫到朋友們。

End.

責任編輯:

總結

以上是生活随笔為你收集整理的c语言线性分类回归库 台湾,最全的线性回归算法库总结—— scikit-learn篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。