R - Lasso Regression - แลมบ์ดาที่แตกต่างกันต่อการถดถอย


11

ฉันต้องการทำสิ่งต่อไปนี้:

1) การถดถอย OLS (ไม่มีเงื่อนไขการลงโทษ) เพื่อรับค่าสัมประสิทธิ์เบต้า ; หมายถึงตัวแปรที่ใช้ในการถดถอย ฉันทำสิ่งนี้ด้วยbjj

lm.model = lm(y~ 0 + x)
betas    = coefficients(lm.model)

2) การถดถอยของ Lasso ที่มีเงื่อนไขการลงโทษเกณฑ์การคัดเลือกจะต้องเป็นเกณฑ์ข้อมูล Bayesian (BIC) ที่กำหนดโดย

λj=log(T)T|bj|

โดยที่หมายถึงหมายเลขตัวแปร / regressor,สำหรับจำนวนการสังเกตและสำหรับ betas เริ่มต้นที่ได้รับในขั้นตอนที่ 1) ฉันต้องการให้ผลลัพธ์การถดถอยสำหรับค่าเฉพาะเจาะจงซึ่งแตกต่างกันสำหรับ regressor แต่ละตัวที่ใช้ ดังนั้นถ้ามีสามตัวแปรจะมีสามค่าที่แตกต่างกัน\jTbjλjλj

จากนั้นปัญหาการปรับให้เหมาะสมของ OLS-Lasso

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

ฉันจะทำสิ่งนี้ใน R ด้วยแพ็คเกจ lars หรือ glmnet ได้อย่างไร? ฉันไม่สามารถหาวิธีระบุแลมบ์ดาได้และฉันไม่แน่ใจ 100% ถ้าฉันได้ผลลัพธ์ที่ถูกต้องถ้าฉันวิ่ง

lars.model <- lars(x,y,type = "lasso", intercept = FALSE)
predict.lars(lars.model, type="coefficients", mode="lambda")

ฉันขอขอบคุณความช่วยเหลือที่นี่


ปรับปรุง:

ฉันได้ใช้รหัสต่อไปนี้แล้ว:

fits.cv = cv.glmnet(x,y,type="mse",penalty.factor = pnlty)
lmin    = as.numeric(fits.cv[9]) #lambda.min
fits    = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty)
coef    = coef(fits, s = lmin)

ในบรรทัดที่ 1 ฉันใช้การตรวจสอบไขว้กับปัจจัยการลงโทษที่ระบุของฉัน ( ) ซึ่งแตกต่างกันสำหรับ regressor แต่ละตัว . บรรทัดที่ 2 เลือก "lambda.min" ของ fits.cv ซึ่งเป็น lambda ที่ให้ข้อผิดพลาดการตรวจสอบความถูกต้องข้ามขั้นต่ำ บรรทัดที่ 3 ใช้ข้อมูลแบบ lasso fit ( ) อีกครั้งผมใช้ปัจจัยโทษ\บรรทัดที่ 4 แยกค่าสัมประสิทธิ์จากความพอดีซึ่งเป็นของ "ดีที่สุด"เลือกในบรรทัดที่ 2λλλj=log(T)T|bj|alpha=1λλ

ตอนนี้ฉันมีค่าสัมประสิทธิ์เบต้าสำหรับ regressors ซึ่งแสดงวิธีแก้ปัญหาที่ดีที่สุดของปัญหาการย่อขนาด

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

ด้วยปัจจัยการลงโทษ|} ค่าสัมประสิทธิ์ที่เหมาะสมที่สุดน่าจะเป็นเซตย่อยของ regressors ที่ฉันใช้ในตอนแรกนี่เป็นผลมาจากวิธี Lasso ที่ลดจำนวน regressors ที่ใช้ลงไปλj=log(T)T|bj|

ความเข้าใจของฉันและรหัสถูกต้องหรือไม่


2
คุณสามารถใช้มาร์กอัป LATEX ในโพสต์ของคุณล้อมรอบด้วยเครื่องหมายดอลลาร์ $\alpha$กลายเป็น\โปรดทำสิ่งนี้เนื่องจากจะทำให้ผู้คนสามารถเข้าใจคำถามของคุณได้ง่ายขึ้นและตอบคำถาม α
Sycorax พูดว่า Reinstate Monica

คำตอบ:


15

จากglmnetเอกสารประกอบ ( ?glmnet) เราเห็นว่ามันเป็นไปได้ที่จะทำการลดขนาดที่แตกต่างกัน สิ่งนี้ทำให้เราได้อย่างน้อยส่วนหนึ่งในการตอบคำถามของ OP

penalty.factor: ปัจจัยการลงโทษแยกสามารถนำไปใช้กับแต่ละสัมประสิทธิ์ นี่คือตัวเลขที่คูณlambdaเพื่ออนุญาตการย่อส่วน สามารถเป็น 0 สำหรับตัวแปรบางตัวซึ่งแสดงถึงไม่มีการหดตัวและตัวแปรนั้นรวมอยู่ในโมเดลเสมอ ค่าเริ่มต้นคือ 1 สำหรับตัวแปรทั้งหมด (และอินฟินิตี้โดยนัยสำหรับตัวแปรที่ระบุไว้ในexclude) หมายเหตุ: ปัจจัยการลงโทษจะได้รับการลดหย่อนภายในเพื่อรวมnvarsและlambdaลำดับจะสะท้อนถึงการเปลี่ยนแปลงนี้

อย่างไรก็ตามเพื่อตอบคำถามโดยสมบูรณ์ฉันคิดว่ามีสองวิธีให้คุณขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ

  1. คำถามของคุณเป็นวิธีการที่จะนำไปใช้ค่าหดตัวglmnetและดึงค่าสัมประสิทธิ์สำหรับค่าเฉพาะ\จัดหาST ค่าบางอย่างจะไม่ประสบความสำเร็จในการหดตัว 1 ค่าที่ค่าใด ๆ\เพื่อให้บรรลุการหดตัวการหดตัวของแต่ละคือเราแค่ต้องทำพีชคณิต Letเป็นปัจจัยการลงโทษสำหรับสิ่งที่จะจ่ายให้กับ จากเอกสารเราจะเห็นว่าค่าเหล่านี้ถูกปรับอัตราส่วนใหม่ด้วยปัจจัยของ st|} ซึ่งหมายความว่าλ φ J = บันทึกTλpenalty.factorλbjϕjbjCϕj=ϕj m=C m j = 1บันทึกTϕj=logTT|bj|ϕjbjpenalty.factorCϕj=ϕjϕj ϕjCϕj λ=1m=Cj=1mlogTT|bj|ϕjแทนที่ในนิพจน์การปรับให้เหมาะสมด้านล่าง ดังนั้นแก้ปัญหาสำหรับจัดหาค่าไปแล้วดึงค่าสัมประสิทธิ์สำหรับ 1 ฉันจะแนะนำให้ใช้ϕjCϕjglmnetλ=1coef(model, s=1, exact=T)

  2. วิธีที่สองคือวิธีการใช้ "มาตรฐาน" glmnet: หนึ่งตัวทำการข้ามการตรวจสอบความถูกต้อง -fold ซ้ำเพื่อเลือกเพื่อให้คุณลด MSE ที่ไม่อยู่ในกลุ่มตัวอย่าง นี่คือสิ่งที่ฉันอธิบายด้านล่างโดยละเอียด เหตุผลที่เราใช้ CV และตรวจสอบMSE นอกตัวอย่างเนื่องจาก MSE ในตัวอย่างจะถูกย่อให้เล็กที่สุดสำหรับนั่นคือคือ MLE สามัญ การใช้ CV ในขณะที่การเปลี่ยนแปลงช่วยให้เราสามารถประเมินว่าแบบจำลองดำเนินการอย่างไรกับข้อมูลที่ไม่อยู่ในกลุ่มตัวอย่างและเลือกที่เหมาะสมที่สุด (ในแง่ที่เฉพาะเจาะจง)λ λ = 0 λ λkλλ=0bλλ

การglmnetเรียกนั้นไม่ได้ระบุ (หรือไม่ควรเพราะมันคำนวณวิถีทั้งหมดโดยค่าเริ่มต้นด้วยเหตุผลด้านประสิทธิภาพ) จะกลับสัมประสิทธิ์สำหรับคุ้มค่า แต่ไม่ว่าคุณจะเลือกผลลัพธ์จะสะท้อนให้เห็นถึงการลงโทษที่แตกต่างที่คุณใช้ในการโทรเพื่อให้พอดีกับแบบจำลองλ λ λλλcoef(fits,s=something)λsomethingλ

วิธีมาตรฐานในการเลือกค่าที่ดีที่สุดของคือการใช้งานมากกว่า การตรวจสอบความถูกต้องไขว้ถูกใช้เพื่อเลือกจำนวนการหดตัวที่ลดข้อผิดพลาดจากตัวอย่างน้อยที่สุดในขณะที่ข้อมูลจำเพาะของจะย่อขนาดคุณลักษณะบางอย่างมากกว่าคุณสมบัติอื่น ๆ ตามรูปแบบน้ำหนักของคุณλcv.glmnetglmnetpenalty.factor

ขั้นตอนนี้ปรับให้เหมาะสม

minbRmt=1T(ytbXt)2+λj=1m(ϕj|bj|)

โดยที่เป็นค่าปรับสำหรับคุณสมบัติ (สิ่งที่คุณให้ไว้ในการโต้แย้ง) (นี่คือความแตกต่างกันเล็กน้อยจากการแสดงออกของการเพิ่มประสิทธิภาพของคุณทราบว่าบางส่วนของตัวห้อยจะแตกต่างกัน.) หมายเหตุว่าระยะเดียวกันทั่วคุณลักษณะทั้งหมดดังนั้นวิธีเดียวที่คุณสมบัติบางอย่างจะหดตัวมากกว่าคนอื่น ๆ คือผ่าน\ที่สำคัญและไม่เหมือนกัน; มีสเกลาร์และเป็นเวกเตอร์! ในนิพจน์นี้ได้รับการแก้ไข / สันนิษฐานว่ารู้จัก นั่นคือการปรับให้เหมาะสมจะเลือกเหมาะสมที่สุดไม่ใช่ดีที่สุดϕjjthpenalty.factorλϕjλϕλϕλbλ.

นี่คือแรงจูงใจglmnetที่ฉันเข้าใจ: ใช้การถดถอยแบบลงโทษเพื่อประเมินรูปแบบการถดถอยที่ไม่ได้มองโลกในแง่ดีเกินไปเกี่ยวกับประสิทธิภาพการทำงานนอกกลุ่มตัวอย่าง หากนี่คือเป้าหมายของคุณบางทีนี่อาจเป็นวิธีที่เหมาะสมสำหรับคุณ


+1 สิ่งนี้ถูกต้อง ฉันจะเพิ่มว่าการทำให้เป็นปกติของการถดถอยสามารถดูได้ในแบบเบย์ก่อนคือจำนวนสูงสุดหลัง (MAP) คือความเป็นไปได้สูงสุด (ML) การทำงานในกรอบดังกล่าวจะช่วยให้ตนเองมีความยืดหยุ่นมากขึ้นในการทำให้เป็นมาตรฐานหากจำเป็น
TLJ

ถ้าฉันเรียกใช้ pnlty = log(24)/(24*betas); fits = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty) ฉันจะแยก betas regressor ซึ่งสอดคล้องกับแลมบ์ดาที่ฉันระบุได้อย่างไรเนื่องจากแลมบ์ดานั้นแตกต่างกันไปในทุกปัจจัยเสี่ยง?
Dom

1
@Dom มัน dawned glmnetกับฉันบิตสายเกินไปว่ามีวิธีที่ชัดเจนที่จะได้รับสิ่งที่คุณต้องการใช้ ดูคำตอบที่แก้ไขแล้วของฉัน
Sycorax พูดว่า Reinstate Monica

2
ระวังการปรับบทลงโทษแยกต่างหากสำหรับนักทำนายแต่ละคน นั่นจะมีจำนวนมากกว่าการเลือกตัวแปรแบบขั้นตอนในบางกรณี การลดการถดถอยที่ถูกปรับลดลงหมายถึงข้อผิดพลาดกำลังสองโดยสมมติว่ามีค่าปรับจำนวนโทษ จำกัด และข้อมูลยืมข้ามผู้ทำนาย
Frank Harrell

2
@ FrankHarrell ขอบคุณสำหรับความคิดเห็น! ดูเหมือนว่าการใช้บทลงโทษที่แตกต่างกันในแต่ละตัวทำนายนั้นเป็นแบบจำลองแบบเบย์ซึ่งถือว่าแตกต่างกันไปก่อนหน้าสำหรับแต่ละพารามิเตอร์ แต่นั่นไม่ได้ทำให้ฉันรู้สึกว่ามีอันตรายที่เป็นเอกลักษณ์เหนือการอนุมานแบบเบย์โดยทั่วไป นอกจากนี้คุณสามารถอธิบายรายละเอียดเกี่ยวกับวิธีการยืมข้อมูลเพื่อทำนายการถดถอยได้อย่างไร? ฉันไม่แน่ใจว่าฉันเข้าใจอย่างถ่องแท้อย่างไรในกรณีดังกล่าว
Sycorax พูดว่า Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.