最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

拓端tecdat|【視頻】Lasso回歸、嶺回歸等正則化回歸數(shù)學原理及R語言實例

2022-04-02 11:34 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=3795

原文出處:拓端數(shù)據(jù)部落公眾號

在本視頻中,我們將介紹Lasso套索回歸、嶺回歸等正則化的回歸方法的數(shù)學原理以及R軟件實例。

視頻:Lasso回歸、嶺回歸正則化回歸數(shù)學原理及R軟件實例

Lasso回歸、嶺回歸等正則化回歸數(shù)學原理及R語言實例

,時長13:27

為什么要LASSO套索回歸?

套索可以通過選擇最小化預測誤差的變量子集來幫助選擇與結(jié)果相關(guān)的變量簡約子集。

選擇模型取決于數(shù)據(jù)集和您正在處理的問題陳述。了解數(shù)據(jù)集以及特征如何相互交互至關(guān)重要。?

當我們增加回歸模型的自由度(增加方程中的多項式),預測變量可能高度相關(guān),多重共線性可能會成為一個問題。這可能導致模型的系數(shù)估計不可靠并且具有高方差。也就是說,當模型被應(yīng)用到以前從未見過的新數(shù)據(jù)集時,它的表現(xiàn)可能會很差。

有許多獨立變量或預測變量,以至于調(diào)查人員無法將所有預測變量放入模型中,或者可能懷疑許多變量與我們有興趣預測的結(jié)果無關(guān)。

因此,如果數(shù)據(jù)集具有高維度和高相關(guān)性,則可以使用套索回歸。

套索回歸會懲罰數(shù)據(jù)集中不太重要的特征,并使它們各自的系數(shù)為零,從而消除它們。因此,它為您提供了特征選擇和簡單模型創(chuàng)建的好處。?

在我們進一步討論套索之前,讓我們回顧一下回歸。

什么是回歸?

回歸是一種統(tǒng)計技術(shù),用于確定一個因變量與一個或多個自變量之間的關(guān)系。簡而言之,回歸分析將告訴您結(jié)果如何因不同因素而變化。?

例如,什么決定了一個人的薪水?

許多因素,如學歷、經(jīng)驗、技能、工作角色、公司等,都會對薪酬產(chǎn)生影響。?

您可以使用回歸分析來預測因變量。?

Y等于m乘以x加c

你還記得我們學生時代的這個方程式嗎??

它只不過是一個線性回歸方程。在上述等式中,因變量估計自變量。

用數(shù)學術(shù)語來說,?

·Y 是依賴值,?

·X 是獨立值,

·m 是直線的斜率,

·c 是常數(shù)值。

在機器學習?或統(tǒng)計世界中,相同的方程項的名稱略有不同?。

·Y 是?預測?值,?

·X是?特征?值,

·m 是 ?系數(shù)?或權(quán)重,

·c 是?偏差值。

?在普通最小 二乘法方法中,我們將殘差的平方和盡可能小。換句話說,我們最小化損失函數(shù):

如果用d表示圖中實際數(shù)據(jù)點與模型線的距離。

損失函數(shù)可以用點之間距離的平方和來表示

在線性回歸中,以最小 二乘最小化的方式選擇最佳模型。

同時也獲得了OLS參數(shù)估計

?在統(tǒng)計學中,需要考慮估計量的兩個關(guān)鍵特征:偏差和方差。偏差是真實總體參數(shù)和預期估計量之間的差異:

它衡量估計的準確性。另一方面,方差衡量這些估計中的分布或不確定性。

其中未知誤差方差σ?平方可以從殘差估計為

偏差和方差都希望很低,因為較大的值會導致模型的預測不佳。

?下圖說明了偏差和方差是什么。想象一下,靶心是我們正在估計的真實參數(shù)β,它的鏡頭是我們的估計值,這些估計值是由四個不同的估計量得出的——偏差和方差,以及它們的組合。

?事實上,模型的誤差可以分解為三個部分:大方差導致的誤差、顯著偏差導致的誤差以及剩下的——無法解釋的部分。

?由于過度擬合,該模型將具有低偏差和高方差。模型擬合在訓練數(shù)據(jù)中很好,但它不會給出很好的測試數(shù)據(jù)預測。

?當預測變量高度相關(guān)時,多重共線性可能會成為一個問題。這可能導致模型的系數(shù)估計不可靠并且具有高方差。

·有很多預測因素。這反映在上面給出的方差公式中:方差接近無窮大。

?正則化開始發(fā)揮作用來解決這個問題。

什么是正則化?

正則化解決了過擬合的問題。它將這些錯誤學習的系數(shù)縮小為零。

正則化的一般解決方案是:以引入一些偏差為代價減少方差。這種方法幾乎總是有利于模型的預測性能。讓我們看一下下面的圖。

隨著模型復雜性的增加(也就是在線性回歸的情況下可以被認為是預測變量的數(shù)量),估計的方差也會增加,但偏差會減少。無偏的 OLS 會將我們置于圖片的右側(cè),這遠非最優(yōu)。這就是我們進行正則化的原因:最小化變量的數(shù)量,降低模型的復雜度的同時,以一些偏差為代價來降低方差,從而在圖上向左移動,向最優(yōu)方向移動。?

套索回歸

套索回歸類似于線性回歸,但它使用了一種“收縮”技術(shù),其中決定系數(shù)向零收縮。?

套索回歸允許您縮小或正則化這些系數(shù)以避免過擬合,并使它們在不同的數(shù)據(jù)集上更好地工作。?

d1、d2、d3等,表示上圖中實際數(shù)據(jù)點與模型線的距離。?

最小二乘是繪制曲線?的點之間距離的平方和。

在線性回歸中,以最小二乘?最小化的方式選擇最佳模型。

在執(zhí)行 套索回歸時,我們在最小二乘中添加了一個懲罰因子。也就是說,模型的選擇方式是將以下?lián)p失函數(shù)降低到最小值。

D 等于 最小二乘 加上 lambda 乘以 (系數(shù)大小的絕對值)的總和

套索回歸懲罰由所有估計的參數(shù)組成。Lambda 可以是零到無窮大之間的任何值。該值決定了執(zhí)行正則化的積極程度。通常使用交叉驗證來選擇它。?

套索懲罰系數(shù)的絕對值之和。當 λ 等于零時,模型變?yōu)槠胀ㄗ钚《嘶貧w。隨著 lambda 值的增加,系數(shù)減小并最終變?yōu)榱?。通過這種方式,套索回歸從我們的模型中消除了無關(guān)緊要的變量。?盡管,我們的正則化模型的偏差可能比線性回歸略高,但對未來預測的方差較小,解決了過擬合問題。

套索回歸和嶺回歸都被稱為?正則化方法,因為它們都試圖最小化殘差平方和 (RSS) 以及一些懲罰項。

換句話說,它們約束或?規(guī)范模型的系數(shù)估計。

但是,他們使用的懲罰有點不同:

套索回歸試圖最小化RSS + λΣ|β?j?|

嶺回歸試圖最小化RSS + λΣβ?j?的平方

當我們使用嶺回歸時,每個預測變量的系數(shù)都縮小到零,但沒有一個可以?完全歸零。

相反,當我們使用 套索回歸時,當 λ 變得足夠大時,一些系數(shù)可能會?完全變?yōu)榱恪?/p>

用技術(shù)術(shù)語來說,套索回歸能夠產(chǎn)生“稀疏”模型——模型只包含預測變量的一個子集。

這就引出了一個問題:嶺回歸還是套索回歸更好?

答案是:視情況而定!

在只有少數(shù)預測變量顯著的情況下,套索回歸往往表現(xiàn)更好,因為它能夠?qū)⒉伙@著的變量完全縮小為零并將它們從模型中刪除。

然而,當許多預測變量在模型中很重要并且它們的系數(shù)大致相等時,嶺回歸往往會表現(xiàn)得更好,因為它將所有預測變量都保留在模型中。

接下來我們在r語言中建立套索回歸,ridge嶺回歸和elastic-net模型:

r語言中對LASSO回歸,Ridge嶺回歸和彈性網(wǎng)絡(luò)Elastic Net模型實現(xiàn)

Glmnet是一個通過懲罰最大似然關(guān)系擬合廣義線性模型的軟件包。正則化路徑是針對正則化參數(shù)λ的值網(wǎng)格處的lasso或Elastic Net(彈性網(wǎng)絡(luò))懲罰值計算的。該算法非常快,并且可以利用輸入矩陣中的稀疏性?x。它適合線性,邏輯和多項式,泊松和Cox回歸模型??梢詮臄M合模型中做出各種預測。它也可以擬合多元線性回歸。

glmnet?解決以下問題

在覆蓋整個范圍的λ值網(wǎng)格上。這里l(y,η)是觀察i的負對數(shù)似然貢獻;例如對于高斯分布是

。?_彈性網(wǎng)絡(luò)_懲罰由α控制,LASSO(α= 1,默認),Ridge(α= 0)。調(diào)整參數(shù)λ控制懲罰的總強度。

眾所周知,嶺懲罰使相關(guān)預測因子的系數(shù)彼此縮小,而套索傾向于選擇其中一個而丟棄其他預測因子。_彈性網(wǎng)絡(luò)_則將這兩者混合在一起。

glmnet?算法使用循環(huán)坐標下降法,該方法在每個參數(shù)固定不變的情況下連續(xù)優(yōu)化目標函數(shù),并反復循環(huán)直到收斂,我們的算法可以非??焖俚赜嬎闱蠼饴窂?。

代碼可以處理稀疏的輸入矩陣格式,以及系數(shù)的范圍約束,還包括用于預測和繪圖的方法,以及執(zhí)行K折交叉驗證的功能。

快速開始

首先,我們加載?glmnet?包:

library(glmnet)

包中使用的默認模型是高斯線性模型或“最小二乘”。我們加載一組預先創(chuàng)建的數(shù)據(jù)以進行說明。用戶可以加載自己的數(shù)據(jù),也可以使用工作空間中保存的數(shù)據(jù)。

該命令?從此保存的R數(shù)據(jù)中加載輸入矩陣?x?和因向量?y。

我們擬合模型?glmnet

fit?=?glmnet(x,?y)

可以通過執(zhí)行plot?函數(shù)來可視化系數(shù)?:

plot(fit)

每條曲線對應(yīng)一個變量。它顯示了當λ變化時,其系數(shù)相對于整個系數(shù)向量的?1范數(shù)的路徑。上方的軸表示當前λ處非零系數(shù)的數(shù)量,這是套索的有效自由度(_df_)。用戶可能還希望對曲線進行注釋。這可以通過label = TRUE?在plot命令中進行設(shè)置來完成?。

glmnet?如果我們只是輸入對象名稱或使用print?函數(shù),則會顯示每個步驟的路徑?摘要?:

print(fit)

  1. ##?

  2. ##?Call:??glmnet(x?=?x,?y?=?y)?

  3. ##?

  4. ##???????Df???%Dev??Lambda

  5. ##??\[1,\]??0?0.0000?1.63000

  6. ##??\[2,\]??2?0.0553?1.49000

  7. ##??\[3,\]??2?0.1460?1.35000

  8. ##??\[4,\]??2?0.2210?1.23000

  9. ##??\[5,\]??2?0.2840?1.12000

  10. ##??\[6,\]??2?0.3350?1.02000

  11. ##??\[7,\]??4?0.3900?0.93300

  12. ##??\[8,\]??5?0.4560?0.85000

  13. ##??\[9,\]??5?0.5150?0.77500

  14. ##?\[10,\]??6?0.5740?0.70600

  15. ##?\[11,\]??6?0.6260?0.64300

  16. ##?\[12,\]??6?0.6690?0.58600

  17. ##?\[13,\]??6?0.7050?0.53400

  18. ##?\[14,\]??6?0.7340?0.48700

  19. ##?\[15,\]??7?0.7620?0.44300

  20. ##?\[16,\]??7?0.7860?0.40400

  21. ##?\[17,\]??7?0.8050?0.36800

  22. ##?\[18,\]??7?0.8220?0.33500

  23. ##?\[19,\]??7?0.8350?0.30600

  24. ##?\[20,\]??7?0.8460?0.27800

它從左到右顯示了非零系數(shù)的數(shù)量(Df),解釋的(零)偏差百分比(%dev)和λ(Lambda)的值。

我們可以在序列范圍內(nèi)獲得一個或多個λ處的實際系數(shù):

coef(fit,s=0.1)

  1. ##?21?x?1?sparse?Matrix?of?class?"dgCMatrix"

  2. ##?????????????????????1

  3. ##?(Intercept)??0.150928

  4. ##?V1???????????1.320597

  5. ##?V2???????????.???????

  6. ##?V3???????????0.675110

  7. ##?V4???????????.???????

  8. ##?V5??????????-0.817412

  9. ##?V6???????????0.521437

  10. ##?V7???????????0.004829

  11. ##?V8???????????0.319416

  12. ##?V9???????????.???????

  13. ##?V10??????????.???????

  14. ##?V11??????????0.142499

  15. ##?V12??????????.???????

  16. ##?V13??????????.???????

  17. ##?V14?????????-1.059979

  18. ##?V15??????????.???????

  19. ##?V16??????????.???????

  20. ##?V17??????????.???????

  21. ##?V18??????????.???????

  22. ##?V19??????????.???????

  23. ##?V20?????????-1.021874

還可以使用新的輸入數(shù)據(jù)在特定的λ處進行預測:

predict(fit,newx=nx,s=c(0.1,0.05))

  1. ##?????????????1???????2

  2. ##??\[1,\]??4.4641??4.7001

  3. ##??\[2,\]??1.7509??1.8513

  4. ##??\[3,\]??4.5207??4.6512

  5. ##??\[4,\]?-0.6184?-0.6764

  6. ##??\[5,\]??1.7302??1.8451

  7. ##??\[6,\]??0.3565??0.3512

  8. ##??\[7,\]??0.2881??0.2662

  9. ##??\[8,\]??2.7776??2.8209

  10. ##??\[9,\]?-3.7016?-3.7773

  11. ##?\[10,\]??1.1546??1.1067

該函數(shù)?glmnet?返回一系列模型供用戶選擇。交叉驗證可能是該任務(wù)最簡單,使用最廣泛的方法。

cv.glmnet?是交叉驗證的主要函數(shù)。

cv.glmnet?返回一個?cv.glmnet?對象,此處為“ cvfit”,其中包含交叉驗證擬合的所有成分的列表。

我們可以繪制對象。

它包括交叉驗證曲線(紅色虛線)和沿λ序列的上下標準偏差曲線(誤差線)。垂直虛線表示兩個選定的λ。

我們可以查看所選的λ和相應(yīng)的系數(shù)。例如,

cvfit$lambda.min##?\[1\]?0.08307

lambda.min?是給出最小平均交叉驗證誤差的λ值。保存的另一個λ是?lambda.1se,它給出了的模型,使得誤差在最小值的一個標準誤差以內(nèi)。我們只需要更換?lambda.min?到lambda.1se?以上。

coef(cvfit,?s?=?"lambda.min")

  1. ##?21?x?1?sparse?Matrix?of?class?"dgCMatrix"

  2. ##????????????????????1

  3. ##?(Intercept)??0.14936

  4. ##?V1???????????1.32975

  5. ##?V2???????????.??????

  6. ##?V3???????????0.69096

  7. ##?V4???????????.??????

  8. ##?V5??????????-0.83123

  9. ##?V6???????????0.53670

  10. ##?V7???????????0.02005

  11. ##?V8???????????0.33194

  12. ##?V9???????????.??????

  13. ##?V10??????????.??????

  14. ##?V11??????????0.16239

  15. ##?V12??????????.??????

  16. ##?V13??????????.??????

  17. ##?V14?????????-1.07081

  18. ##?V15??????????.??????

  19. ##?V16??????????.??????

  20. ##?V17??????????.??????

  21. ##?V18??????????.??????

  22. ##?V19??????????.??????

  23. ##?V20?????????-1.04341

注意,系數(shù)以稀疏矩陣格式表示。原因是沿著正則化路徑的解通常是稀疏的,因此使用稀疏格式在時間和空間上更為有效。

可以根據(jù)擬合的cv.glmnet?對象進行預測?。讓我們看一個示例。

  1. ##????????????1

  2. ##?\[1,\]?-1.3647

  3. ##?\[2,\]??2.5686

  4. ##?\[3,\]??0.5706

  5. ##?\[4,\]??1.9682

  6. ##?\[5,\]??1.4964

newx?與新的輸入矩陣?s相同,如前所述,是預測的λ值。

線性回歸

這里的線性回歸是指兩個模型系列。一個是?gaussian正態(tài)_分布_,另一個是?mgaussian多元正態(tài)_分布_。

正態(tài)_分布_

假設(shè)我們有觀測值xi∈Rp并且yi∈R,i = 1,...,N。目標函數(shù)是

其中λ≥0是復雜度參數(shù),0≤α≤1在嶺回歸(α=0)和套索LASSO(α=1)之間。

應(yīng)用坐標下降法解決該問題。具體地說,通過計算βj=β?j處的梯度和簡單的演算,更新為

其中

。

x?變量標準化為具有單位方差(默認值)時,以上公式適用?。

glmnet?提供各種選項供用戶自定義。我們在這里介紹一些常用的選項,它們可以在glmnet?函數(shù)中指定?。

  • alpha?表示彈性網(wǎng)混合參數(shù)α,范圍α∈[0,1]。α=1是套索(默認),α=0是Ridge。

  • weights?用于觀察權(quán)重。每個觀察值的默認值為1。

  • nlambda?是序列中λ值的數(shù)量。默認值為100。

  • lambda?可以提供,但通常不提供,程序會構(gòu)建一個序列。自動生成時,λ序列由lambda.max?和?確定?lambda.min.ratio。

  • standardize?是x?在擬合模型序列之前進行變量標準化的邏輯標志?。

例如,我們設(shè)置α=0.2,并對后半部分的觀測值賦予兩倍的權(quán)重。為了避免在此處顯示太長時間,我們將其設(shè)置?nlambda?為20。但是,實際上,建議將λ的數(shù)量設(shè)置為100(默認值)或更多。

然后我們可以輸出glmnet?對象。

print(fit)

  1. ##?

  2. ##?Call:??glmnet(x?=?x,?y?=?y,?weights?=?c(rep(1,?50),?rep(2,?50)),?alpha?=?0.2,??????nlambda?=?20)?

  3. ##?

  4. ##???????Df??%Dev??Lambda

  5. ##??\[1,\]??0?0.000?7.94000

  6. ##??\[2,\]??4?0.179?4.89000

  7. ##??\[3,\]??7?0.444?3.01000

  8. ##??\[4,\]??7?0.657?1.85000

  9. ##??\[5,\]??8?0.785?1.14000

  10. ##??\[6,\]??9?0.854?0.70300

  11. ##??\[7,\]?10?0.887?0.43300

  12. ##??\[8,\]?11?0.902?0.26700

  13. ##??\[9,\]?14?0.910?0.16400

  14. ##?\[10,\]?17?0.914?0.10100

  15. ##?\[11,\]?17?0.915?0.06230

  16. ##?\[12,\]?17?0.916?0.03840

  17. ##?\[13,\]?19?0.916?0.02360

  18. ##?\[14,\]?20?0.916?0.01460

  19. ##?\[15,\]?20?0.916?0.00896

  20. ##?\[16,\]?20?0.916?0.00552

  21. ##?\[17,\]?20?0.916?0.00340

這將顯示生成對象的調(diào)用?fit?以及帶有列Df?(非零系數(shù)的數(shù)量),??%dev?(解釋的偏差百分比)和Lambda?(對應(yīng)的λ值)?的三列矩陣?。

我們可以繪制擬合的對象。

讓我們針對log-lambda值標記每個曲線來繪制“擬合”。

這是訓練數(shù)據(jù)中的偏差百分比。我們在這里看到的是,在路徑末端時,該值變化不大,但是系數(shù)有點“膨脹”。這使我們可以將注意力集中在重要的擬合部分上。

我們可以提取系數(shù)并在某些特定值的情況下進行預測。兩種常用的選項是:

  • s?指定進行提取的λ值。

  • exact?指示是否需要系數(shù)的精確值。

一個簡單的例子是:

  1. ##?21?x?2?sparse?Matrix?of?class?"dgCMatrix"

  2. ##????????????????????1?????????1

  3. ##?(Intercept)??0.19657??0.199099

  4. ##?V1???????????1.17496??1.174650

  5. ##?V2???????????.????????.???????

  6. ##?V3???????????0.52934??0.531935

  7. ##?V4???????????.????????.???????

  8. ##?V5??????????-0.76126?-0.760959

  9. ##?V6???????????0.46627??0.468209

  10. ##?V7???????????0.06148??0.061927

  11. ##?V8???????????0.38049??0.380301

  12. ##?V9???????????.????????.???????

  13. ##?V10??????????.????????.???????

  14. ##?V11??????????0.14214??0.143261

  15. ##?V12??????????.????????.???????

  16. ##?V13??????????.????????.???????

  17. ##?V14?????????-0.91090?-0.911207

  18. ##?V15??????????.????????.???????

  19. ##?V16??????????.????????.???????

  20. ##?V17??????????.????????.???????

  21. ##?V18??????????.????????0.009197

  22. ##?V19??????????.????????.???????

  23. ##?V20?????????-0.86099?-0.863117

左列是,exact = TRUE?右列是?FALSE。從上面我們可以看到,0.01不在序列中,因此盡管沒有太大差異,但還是有一些差異。如果沒有特殊要求,則線性插補就足夠了。

用戶可以根據(jù)擬合的對象進行預測。除中的選項外?coef,主要參數(shù)是?newx的新值矩陣?x。type?選項允許用戶選擇預測類型:*“鏈接”給出擬合值

  • 因變量與正態(tài)分布的“鏈接”相同。

  • “系數(shù)”計算值為的系數(shù)?s

例如,

  1. ##????????????1

  2. ##?\[1,\]?-0.9803

  3. ##?\[2,\]??2.2992

  4. ##?\[3,\]??0.6011

  5. ##?\[4,\]??2.3573

  6. ##?\[5,\]??1.7520

給出在λ=0.05時前5個觀測值的擬合值。如果提供的多個值,?s?則會生成預測矩陣。

用戶可以自定義K折交叉驗證。除所有?glmnet?參數(shù)外,?cv.glmnet?還有特殊的參數(shù),包括?nfolds?(次數(shù)),??foldid?(用戶提供的次數(shù)),??type.measure(用于交叉驗證的損失):*“ deviance”或“ mse”

  • “ mae”使用平均絕對誤差

舉個例子,

cvfit?=?cv.glmnet(x,?y,?type.measure?=?"mse",?nfolds?=?20)

根據(jù)均方誤差標準進行20折交叉驗證。

并行計算也受?cv.glmnet。為我們在這里給出一個簡單的比較示例。

system.time(cv.glmnet(X,?Y))

  1. ##????user??system?elapsed?

  2. ##???3.591???0.103???3.724

system.time(cv.glmnet(X,?Y,?parallel?=?TRUE))
  1. ##????user??system?elapsed?

  2. ##???4.318???0.391???2.700

從上面的建議可以看出,并行計算可以大大加快計算過程。

  • “ lambda.min”:達到最小MSE的λ。

cvfit$lambda.min##?\[1\]?0.08307

  1. ##?21?x?1?sparse?Matrix?of?class?"dgCMatrix"

  2. ##????????????????????1

  3. ##?(Intercept)??0.14936

  4. ##?V1???????????1.32975

  5. ##?V2???????????.??????

  6. ##?V3???????????0.69096

  7. ##?V4???????????.??????

  8. ##?V5??????????-0.83123

  9. ##?V6???????????0.53670

  10. ##?V7???????????0.02005

  11. ##?V8???????????0.33194

  12. ##?V9???????????.??????

  13. ##?V10??????????.??????

  14. ##?V11??????????0.16239

  15. ##?V12??????????.??????

  16. ##?V13??????????.??????

  17. ##?V14?????????-1.07081

  18. ##?V15??????????.??????

  19. ##?V16??????????.??????

  20. ##?V17??????????.??????

  21. ##?V18??????????.??????

  22. ##?V19??????????.??????

  23. ##?V20?????????-1.04341

在這里,我們使用相同的k折,為α選擇一個值。

將它們?nèi)糠胖迷谕焕L圖上:

我們看到lasso(alpha=1)在這里表現(xiàn)最好。

系數(shù)上下限

假設(shè)我們要擬合我們的模型,但將系數(shù)限制為大于-0.7且小于0.5。這可以通過upper.limits?和?lower.limits?參數(shù)實現(xiàn)?:

通常,我們希望系數(shù)為正,因此我們只能lower.limit?將其設(shè)置?為0。

懲罰因素

此參數(shù)允許用戶將單獨的懲罰因子應(yīng)用于每個系數(shù)。每個參數(shù)的默認值為1,但可以指定其他值。特別是,任何penalty.factor?等于零的變量?都不會受到懲罰

在許多情況下,某些變量可能是重要,我們希望一直保留它們,這可以通過將相應(yīng)的懲罰因子設(shè)置為0來實現(xiàn):

我們從標簽中看到懲罰因子為0的三個變量始終保留在模型中,而其他變量遵循典型的正則化路徑并最終縮小為0。

自定義圖

有時,尤其是在變量數(shù)量很少的情況下,我們想在圖上添加變量標簽。

我們首先生成帶有10個變量的一些數(shù)據(jù),然后,我們擬合glmnet模型,并繪制標準圖。

我們希望用變量名標記曲線。在路徑的末尾放置系數(shù)的位置。

多元正態(tài)

使用family = "mgaussian"?option?獲得多元正態(tài)分布glmnet。

顯然,顧名思義,y不是向量,而是矩陣。結(jié)果,每個λ值的系數(shù)也是一個矩陣。

在這里,我們解決以下問題:

這里,βj是p×K系數(shù)矩陣β的第j行,對于單個預測變量xj,我們用每個系數(shù)K向量βj的組套索罰分代替每個單一系數(shù)的絕對罰分。

我們使用預先生成的一組數(shù)據(jù)進行說明。

我們擬合數(shù)據(jù),并返回對象“ mfit”。

mfit?=?glmnet(x,?y,?family?=?"mgaussian")

如果為?standardize.response = TRUE,則將因變量標準化。

為了可視化系數(shù),我們使用?plot?函數(shù)。

注意我們設(shè)置了?type.coef = "2norm"。在此設(shè)置下,每個變量繪制一條曲線,其值等于?2范數(shù)。默認設(shè)置為?type.coef = "coef",其中為每個因變量創(chuàng)建一個系數(shù)圖。

通過使用該函數(shù)coef?,我們可以提取要求的λ值的系數(shù),?并通過進行預測?。

  1. ##?,?,?1

  2. ##?

  3. ##???????????y1??????y2??????y3????y4

  4. ##?\[1,\]?-4.7106?-1.1635??0.6028?3.741

  5. ##?\[2,\]??4.1302?-3.0508?-1.2123?4.970

  6. ##?\[3,\]??3.1595?-0.5760??0.2608?2.054

  7. ##?\[4,\]??0.6459??2.1206?-0.2252?3.146

  8. ##?\[5,\]?-1.1792??0.1056?-7.3353?3.248

  9. ##?

  10. ##?,?,?2

  11. ##?

  12. ##???????????y1??????y2??????y3????y4

  13. ##?\[1,\]?-4.6415?-1.2290??0.6118?3.780

  14. ##?\[2,\]??4.4713?-3.2530?-1.2573?5.266

  15. ##?\[3,\]??3.4735?-0.6929??0.4684?2.056

  16. ##?\[4,\]??0.7353??2.2965?-0.2190?2.989

  17. ##?\[5,\]?-1.2760??0.2893?-7.8259?3.205

預測結(jié)果保存在三維數(shù)組中,其中前兩個維是每個因變量的預測矩陣,第三個維表示因變量。

我們還可以進行k折交叉驗證。

我們繪制結(jié)果?cv.glmnet?對象“ cvmfit”。

顯示選定的λ最佳值

cvmfit$lambda.min##?\[1\]?0.04732cvmfit$lambda.1se##?\[1\]?0.1317

邏輯回歸

當因變量是分類的時,邏輯回歸是另一個廣泛使用的模型。如果有兩個可能的結(jié)果,則使用二項式分布,否則使用多項式。

二項式模型

對于二項式模型,假設(shè)因變量的取值為G = {1,2} 。表示yi = I(gi = 1)。我們建模

可以用以下形式寫

懲罰邏輯回歸的目標函數(shù)使用負二項式對數(shù)似然

我們的算法使用對數(shù)似然的二次逼近,然后對所得的懲罰加權(quán)最小二乘問題進行下降。這些構(gòu)成了內(nèi)部和外部循環(huán)。

出于說明目的,我們?從數(shù)據(jù)文件加載預生成的輸入矩陣?x?和因變量?y。

對于二項式邏輯回歸,因變量y可以是兩個級別的因子,也可以是計數(shù)或比例的兩列矩陣。

glmnet?二項式回歸的其他可選參數(shù)與正態(tài)分布的參數(shù)?幾乎相同。不要忘記將family?選項設(shè)置?為“ binomial”。

fit?=?glmnet(x,?y,?family?=?"binomial")

像以前一樣,我們可以輸出和繪制擬合的對象,提取特定λ處的系數(shù),并進行預測。

邏輯回歸略有不同,主要體現(xiàn)在選擇上?type?!版溄印焙汀耙蜃兞俊辈坏葍r,“類”僅可用于邏輯回歸??傊?,*“鏈接”給出了線性預測變量

  • “因變量”給出合適的概率

  • “類別”產(chǎn)生對應(yīng)于最大概率的類別標簽。

  • “系數(shù)”計算值為的系數(shù)?s

在下面的示例中,我們在λ=0.05,0.01的情況下對類別標簽進行了預測。

  1. ##??????1???2??

  2. ##?\[1,\]?"0"?"0"

  3. ##?\[2,\]?"1"?"1"

  4. ##?\[3,\]?"1"?"1"

  5. ##?\[4,\]?"0"?"0"

  6. ##?\[5,\]?"1"?"1"

對于邏輯回歸,type.measure

  • “偏差”使用實際偏差。

  • “ mae”使用平均絕對誤差。

  • “class”給出錯誤分類錯誤。

  • “ auc”(僅適用于兩類邏輯回歸)給出了ROC曲線下的面積。

例如,

它使用分類誤差作為10倍交叉驗證的標準。

我們繪制對象并顯示λ的最佳值。

cvfit$lambda.min##?\[1\]?0.01476cvfit$lambda.1se##?\[1\]?0.02579

coef?并且?predict?類似于正態(tài)分布案例,因此我們省略了細節(jié)。我們通過一些例子進行回顧。

  1. ##?31?x?1?sparse?Matrix?of?class?"dgCMatrix"

  2. ##????????????????????1

  3. ##?(Intercept)??0.24371

  4. ##?V1???????????0.06897

  5. ##?V2???????????0.66252

  6. ##?V3??????????-0.54275

  7. ##?V4??????????-1.13693

  8. ##?V5??????????-0.19143

  9. ##?V6??????????-0.95852

  10. ##?V7???????????.??????

  11. ##?V8??????????-0.56529

  12. ##?V9???????????0.77454

  13. ##?V10?????????-1.45079

  14. ##?V11?????????-0.04363

  15. ##?V12?????????-0.06894

  16. ##?V13??????????.??????

  17. ##?V14??????????.??????

  18. ##?V15??????????.??????

  19. ##?V16??????????0.36685

  20. ##?V17??????????.??????

  21. ##?V18?????????-0.04014

  22. ##?V19??????????.??????

  23. ##?V20??????????.??????

  24. ##?V21??????????.??????

  25. ##?V22??????????0.20882

  26. ##?V23??????????0.34014

  27. ##?V24??????????.??????

  28. ##?V25??????????0.66310

  29. ##?V26?????????-0.33696

  30. ##?V27?????????-0.10570

  31. ##?V28??????????0.24318

  32. ##?V29?????????-0.22445

  33. ##?V30??????????0.11091

如前所述,此處返回的結(jié)果僅針對因子因變量的第二類。

  1. ##???????1??

  2. ##??\[1,\]?"0"

  3. ##??\[2,\]?"1"

  4. ##??\[3,\]?"1"

  5. ##??\[4,\]?"0"

  6. ##??\[5,\]?"1"

  7. ##??\[6,\]?"0"

  8. ##??\[7,\]?"0"

  9. ##??\[8,\]?"0"

  10. ##??\[9,\]?"1"

  11. ##?\[10,\]?"1"

多項式模型

對于多項式模型,假設(shè)因變量變量的K級別為G = {1,2,…,K}。在這里我們建模

設(shè)Y為N×K指標因變量矩陣,元素yi?= I(gi =?)。然后彈性網(wǎng)懲罰的負對數(shù)似然函數(shù)變?yōu)?/p>

β是系數(shù)的p×K矩陣。βk指第k列(對于結(jié)果類別k),βj指第j行(變量j的K個系數(shù)的向量)。最后一個懲罰項是||βj|| q ,我們對q有兩個選擇:q∈{1,2}。當q = 1時,這是每個參數(shù)的套索懲罰。當q = 2時,這是對特定變量的所有K個系數(shù)的分組套索懲罰,這使它們在一起全為零或非零。

對于多項式情況,用法類似于邏輯回歸,我們加載一組生成的數(shù)據(jù)。

glmnet?除少數(shù)情況外,多項式邏輯回歸中的可選參數(shù)?與二項式回歸基本相似。

多項式回歸的一個特殊選項是?type.multinomial,如果允許,則允許使用分組的套索罰分?type.multinomial = "grouped"。這將確保變量的多項式系數(shù)全部一起輸入或輸出,就像多元因變量一樣。

我們繪制結(jié)果。

我們還可以進行交叉驗證并繪制返回的對象。

預測最佳選擇的λ:

  1. ##???????1??

  2. ##??\[1,\]?"3"

  3. ##??\[2,\]?"2"

  4. ##??\[3,\]?"2"

  5. ##??\[4,\]?"1"

  6. ##??\[5,\]?"1"

  7. ##??\[6,\]?"3"

  8. ##??\[7,\]?"3"

  9. ##??\[8,\]?"1"

  10. ##??\[9,\]?"1"

  11. ##?\[10,\]?"2"

泊松模型

Poisson回歸用于在假設(shè)Poisson誤差的情況下對計數(shù)數(shù)據(jù)進行建模,或者在均值和方差成比例的情況下使用非負數(shù)據(jù)進行建模。泊松也是指數(shù)分布族的成員。我們通常以對數(shù)建模:

。
給定觀測值

的對數(shù)似然

和以前一樣,我們優(yōu)化了懲罰對數(shù):

Glmnet使用外部牛頓循環(huán)和內(nèi)部加權(quán)最小二乘循環(huán)(如邏輯回歸)來優(yōu)化此標準。

首先,我們加載一組泊松數(shù)據(jù)。

再次,繪制系數(shù)。

像以前一樣,我們可以?分別使用coef?和?提取系數(shù)并在特定的λ處進行預測?predict

例如,我們可以

  1. ##?21?x?1?sparse?Matrix?of?class?"dgCMatrix"

  2. ##????????????????????1

  3. ##?(Intercept)??0.61123

  4. ##?V1???????????0.45820

  5. ##?V2??????????-0.77061

  6. ##?V3???????????1.34015

  7. ##?V4???????????0.04350

  8. ##?V5??????????-0.20326

  9. ##?V6???????????.??????

  10. ##?V7???????????.??????

  11. ##?V8???????????.??????

  12. ##?V9???????????.??????

  13. ##?V10??????????.??????

  14. ##?V11??????????.??????

  15. ##?V12??????????0.01816

  16. ##?V13??????????.??????

  17. ##?V14??????????.??????

  18. ##?V15??????????.??????

  19. ##?V16??????????.??????

  20. ##?V17??????????.??????

  21. ##?V18??????????.??????

  22. ##?V19??????????.??????

  23. ##?V20??????????.

  1. ##????????????1???????2

  2. ##?\[1,\]??2.4944??4.4263

  3. ##?\[2,\]?10.3513?11.0586

  4. ##?\[3,\]??0.1180??0.1782

  5. ##?\[4,\]??0.9713??1.6829

  6. ##?\[5,\]??1.1133??1.9935

我們還可以使用交叉驗證來找到最佳的λ,從而進行推斷。

選項幾乎與正態(tài)族相同,不同之處在于?type.measure,“ mse”代表均方誤差,“ mae”代表均值絕對誤差。

我們可以繪制?cv.glmnet?對象。

我們還可以顯示最佳的λ和相應(yīng)的系數(shù)。

  1. ##?21?x?2?sparse?Matrix?of?class?"dgCMatrix"

  2. ##?????????????????????1????????2

  3. ##?(Intercept)??0.031263??0.18570

  4. ##?V1???????????0.619053??0.57537

  5. ##?V2??????????-0.984550?-0.93212

  6. ##?V3???????????1.525234??1.47057

  7. ##?V4???????????0.231591??0.19692

  8. ##?V5??????????-0.336659?-0.30469

  9. ##?V6???????????0.001026??.??????

  10. ##?V7??????????-0.012830??.??????

  11. ##?V8???????????.?????????.??????

  12. ##?V9???????????.?????????.??????

  13. ##?V10??????????0.015983??.??????

  14. ##?V11??????????.?????????.??????

  15. ##?V12??????????0.030867??0.02585

  16. ##?V13?????????-0.027971??.??????

  17. ##?V14??????????0.032750??.??????

  18. ##?V15?????????-0.005933??.??????

  19. ##?V16??????????0.017506??.??????

  20. ##?V17??????????.?????????.??????

  21. ##?V18??????????0.004026??.??????

  22. ##?V19?????????-0.033579??.??????

  23. ##?V20??????????0.012049??0.00993

Cox模型

Cox比例風險模型通常用于研究預測變量與生存時間之間的關(guān)系。

Cox比例風險回歸模型,它不是直接考察

?與X的關(guān)系,而是用

?作為因變量,模型的基本形式為:

式中,

?為自變量的偏回歸系數(shù),它是須從樣本數(shù)據(jù)作出估計的參數(shù);

?是當X向量為0時,

?的基準危險率,它是有待于從樣本數(shù)據(jù)作出估計的量。簡稱為Cox回歸模型。

由于Cox回歸模型對

?未作任何假定,因此Cox回歸模型在處理問題時具有較大的靈活性;另一方面,在許多情況下,我們只需估計出參數(shù)

?(如因素分析等),即使在

?未知的情況下,仍可估計出參數(shù)

?。這就是說,Cox回歸模型由于含有

?,因此它不是完全的參數(shù)模型,但仍可根據(jù)公式(1)作出參數(shù)

?的估計,故Cox回歸模型屬于半?yún)?shù)模型。

公式可以轉(zhuǎn)化為:

我們使用一組預先生成的樣本數(shù)據(jù)。用戶可以加載自己的數(shù)據(jù)并遵循類似的過程。在這種情況下,x必須是協(xié)變量值的n×p矩陣-每行對應(yīng)一個患者,每列對應(yīng)一個協(xié)變量。y是一個n×2矩陣。

  1. ##?????????time?status

  2. ##?\[1,\]?1.76878??????1

  3. ##?\[2,\]?0.54528??????1

  4. ##?\[3,\]?0.04486??????0

  5. ##?\[4,\]?0.85032??????0

  6. ##?\[5,\]?0.61488??????1

Surv?包中的?函數(shù)?survival?可以創(chuàng)建這樣的矩陣。

我們計算默認設(shè)置下的求解路徑。

繪制系數(shù)。

提取特定值λ處的系數(shù)。

  1. ##?30?x?1?sparse?Matrix?of?class?"dgCMatrix"

  2. ##????????????1

  3. ##?V1???0.37694

  4. ##?V2??-0.09548

  5. ##?V3??-0.13596

  6. ##?V4???0.09814

  7. ##?V5??-0.11438

  8. ##?V6??-0.38899

  9. ##?V7???0.24291

  10. ##?V8???0.03648

  11. ##?V9???0.34740

  12. ##?V10??0.03865

  13. ##?V11??.??????

  14. ##?V12??.??????

  15. ##?V13??.??????

  16. ##?V14??.??????

  17. ##?V15??.??????

  18. ##?V16??.??????

  19. ##?V17??.??????

  20. ##?V18??.??????

  21. ##?V19??.??????

  22. ##?V20??.??????

  23. ##?V21??.??????

  24. ##?V22??.??????

  25. ##?V23??.??????

  26. ##?V24??.??????

  27. ##?V25??.??????

  28. ##?V26??.??????

  29. ##?V27??.??????

  30. ##?V28??.??????

  31. ##?V29??.??????

  32. ##?V30??.

函數(shù)?cv.glmnet?可用于計算Cox模型的k折交叉驗證。

擬合后,我們可以查看最佳λ值和交叉驗證的誤差圖,幫助評估我們的模型。

如前所述,圖中的左垂直線向我們顯示了CV誤差曲線達到最小值的位置。右邊的垂直線向我們展示了正則化的模型,其CV誤差在最小值的1個標準偏差之內(nèi)。我們還提取了最優(yōu)λ。

cvfit$lambda.min##?\[1\]?0.01594cvfit$lambda.1se##?\[1\]?0.04869

我們可以檢查模型中的協(xié)變量并查看其系數(shù)。

index.min

  1. ##??\[1\]??0.491297?-0.174601?-0.218649??0.175112?-0.186673?-0.490250??0.335197

  2. ##??\[8\]??0.091587??0.450169??0.115922??0.017595?-0.018365?-0.002806?-0.001423

  3. ##?\[15\]?-0.023429??0.001688?-0.008236

coef.min
  1. ##?30?x?1?sparse?Matrix?of?class?"dgCMatrix"

  2. ##?????????????1

  3. ##?V1???0.491297

  4. ##?V2??-0.174601

  5. ##?V3??-0.218649

  6. ##?V4???0.175112

  7. ##?V5??-0.186673

  8. ##?V6??-0.490250

  9. ##?V7???0.335197

  10. ##?V8???0.091587

  11. ##?V9???0.450169

  12. ##?V10??0.115922

  13. ##?V11??.???????

  14. ##?V12??.???????

  15. ##?V13??0.017595

  16. ##?V14??.???????

  17. ##?V15??.???????

  18. ##?V16??.???????

  19. ##?V17?-0.018365

  20. ##?V18??.???????

  21. ##?V19??.???????

  22. ##?V20??.???????

  23. ##?V21?-0.002806

  24. ##?V22?-0.001423

  25. ##?V23??.???????

  26. ##?V24??.???????

  27. ##?V25?-0.023429

  28. ##?V26??.???????

  29. ##?V27??0.001688

  30. ##?V28??.???????

  31. ##?V29??.???????

  32. ##?V30?-0.008236

稀疏矩陣

我們的程序包支持稀疏的輸入矩陣,該矩陣可以高效地存儲和操作大型矩陣,但只有少數(shù)幾個非零條目。

我們加載一組預先創(chuàng)建的樣本數(shù)據(jù)。

加載100 * 20的稀疏矩陣和?y因向量。

  1. ##?\[1\]?"dgCMatrix"

  2. ##?attr(,"package")

  3. ##?\[1\]?"Matrix"

我們可以像以前一樣擬合模型。

fit?=?glmnet(x,?y)

進行交叉驗證并繪制結(jié)果對象。

預測新輸入矩陣?。例如,

  1. ##????????????1

  2. ##?\[1,\]??0.3826

  3. ##?\[2,\]?-0.2172

  4. ##?\[3,\]?-1.6622

  5. ##?\[4,\]?-0.4175

  6. ##?\[5,\]?-1.3941

參考文獻

Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2008).
Regularization Paths for Generalized Linear Models via Coordinate Descent

本文摘選r語言中對LASSO回歸,Ridge嶺回歸和彈性網(wǎng)絡(luò)Elastic Net模型實現(xiàn),點擊“閱讀原文”獲取全文完整資料。

點擊標題查閱往期內(nèi)容

R語言Lasso回歸模型變量選擇和糖尿病發(fā)展預測模型

用LASSO,adaptive LASSO預測通貨膨脹時間序列

MATLAB用Lasso回歸擬合高維數(shù)據(jù)和交叉驗證

群組變量選擇、組懲罰group lasso套索模型預測新生兒出生體重風險因素數(shù)據(jù)和交叉驗證、可視化

高維數(shù)據(jù)懲罰回歸方法:主成分回歸PCR、嶺回歸、lasso、彈性網(wǎng)絡(luò)elastic net分析基因數(shù)據(jù)

Python高維變量選擇:SCAD平滑剪切絕對偏差懲罰、Lasso懲罰函數(shù)比較

R使用LASSO回歸預測股票收益

廣義線性模型glm泊松回歸的lasso、彈性網(wǎng)絡(luò)分類預測學生考試成績數(shù)據(jù)和交叉驗證

貝葉斯分位數(shù)回歸、lasso和自適應(yīng)lasso貝葉斯分位數(shù)回歸分析免疫球蛋白、前列腺癌數(shù)據(jù)

R語言RSTAN MCMC:NUTS采樣算法用LASSO 構(gòu)建貝葉斯線性回歸模型分析職業(yè)聲望數(shù)據(jù)

r語言中對LASSO回歸,Ridge嶺回歸和彈性網(wǎng)絡(luò)Elastic Net模型實現(xiàn)

R語言高維數(shù)據(jù)懲罰回歸方法:主成分回歸PCR、嶺回歸、lasso、彈性網(wǎng)絡(luò)elastic net分析基因數(shù)據(jù)(含練習題)

廣義線性模型glm泊松回歸的lasso、彈性網(wǎng)絡(luò)分類預測學生考試成績數(shù)據(jù)和交叉驗證

貝葉斯分位數(shù)回歸、lasso和自適應(yīng)lasso貝葉斯分位數(shù)回歸分析免疫球蛋白、前列腺癌數(shù)據(jù)

R語言RSTAN MCMC:NUTS采樣算法用LASSO 構(gòu)建貝葉斯線性回歸模型分析職業(yè)聲望數(shù)據(jù)

r語言中對LASSO回歸,Ridge嶺回歸和彈性網(wǎng)絡(luò)Elastic Net模型實現(xiàn)

R語言高維數(shù)據(jù)懲罰回歸方法:主成分回歸PCR、嶺回歸、lasso、彈性網(wǎng)絡(luò)elastic net分析基因數(shù)據(jù)(含練習題)

Python中LARS和Lasso回歸之最小角算法Lars分析波士頓住房數(shù)據(jù)實例

R語言自適應(yīng)LASSO 多項式回歸、二元邏輯回歸和嶺回歸應(yīng)用分析

R語言懲罰logistic邏輯回歸(LASSO,嶺回歸)高維變量選擇的分類模型案例

Python中的Lasso回歸之最小角算法LARS

r語言中對LASSO回歸,Ridge嶺回歸和彈性網(wǎng)絡(luò)Elastic Net模型實現(xiàn)

R語言實現(xiàn)LASSO回歸——自己編寫LASSO回歸算法

r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現(xiàn)

R使用LASSO回歸預測股票收益

R語言如何和何時使用glmnet嶺回歸

R語言中的嶺回歸、套索回歸、主成分回歸:線性模型選擇和正則化

Python中的ARIMA模型、SARIMA模型和SARIMAX模型對時間序列預測

R語言arima,向量自回歸(VAR),周期自回歸(PAR)模型分析溫度時間序列

【視頻】Python和R語言使用指數(shù)加權(quán)平均(EWMA),ARIMA自回歸移動平均模型預測時間序列

Python用ARIMA和SARIMA模型預測銷量時間序列數(shù)據(jù)


拓端tecdat|【視頻】Lasso回歸、嶺回歸等正則化回歸數(shù)學原理及R語言實例的評論 (共 條)

分享到微博請遵守國家法律
大田县| 金平| 河北省| 仪陇县| 清徐县| 镇宁| 罗平县| 恩平市| 临沂市| 舒兰市| 阿勒泰市| 江门市| 紫阳县| 鹤山市| 玛曲县| 常德市| 平乡县| 徐闻县| 盘山县| 阿拉善右旗| 黎城县| 海伦市| 盐津县| 明水县| 松潘县| 枣强县| 唐河县| 墨玉县| 大余县| 马龙县| 昭觉县| 汾阳市| 靖安县| 大关县| 鸡泽县| 新沂市| 原阳县| 遂溪县| 湖口县| 安仁县| 江油市|