R - Lasso Regression - Lambda khác nhau cho mỗi biến hồi quy


11

Tôi muốn làm như sau:

1) Hồi quy OLS (không có thời hạn xử phạt) để có hệ số beta ; là viết tắt của các biến được sử dụng để hồi quy. Tôi làm điều này bằng cách jbjj

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

2) Hồi quy Lasso với thời hạn xử phạt, tiêu chí lựa chọn sẽ là Tiêu chí Thông tin Bayes (BIC), được đưa ra bởi

λj=log(T)T|bj|

Trong đó là viết tắt của số biến / hồi quy, cho số lượng quan sát và cho các betas ban đầu thu được ở bước 1). Tôi muốn có kết quả hồi quy cho giá trị cụ thể này , khác với từng biến hồi quy được sử dụng. Do đó, nếu có ba biến, sẽ có ba giá trị khác nhau .T b j λ j λ jjTbjλjλj

Vấn đề tối ưu hóa OLS-Lasso sau đó được đưa ra bởi

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

Làm thế nào tôi có thể làm điều này trong R với gói lars hoặc glmnet? Tôi không thể tìm cách chỉ định lambda và tôi không chắc chắn 100% nếu tôi nhận được kết quả chính xác nếu tôi chạy

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

Tôi đánh giá cao bất kỳ sự giúp đỡ ở đây.


Cập nhật:

Tôi đã sử dụng mã sau đây:

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)

Trong dòng 1, tôi sử dụng xác thực chéo với hệ số hình phạt được chỉ định của mình ( ), khác nhau cho mỗi biến hồi quy . Dòng 2 chọn "lambda.min" của fit.cv, đây là lambda cung cấp lỗi xác thực chéo trung bình tối thiểu. Dòng 3 thực hiện một lasso fit ( ) trên dữ liệu. Một lần nữa tôi đã sử dụng yếu tố hình phạt . Dòng 4 trích xuất các hệ số từ phù hợp với "tối ưu" được chọn trong dòng 2.λλλj=log(T)T|bj|alpha=1λλ

Bây giờ tôi có các hệ số beta cho các biến hồi quy mô tả giải pháp tối ưu cho bài toán tối thiểu hóa

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

với hệ số phạt . Tập hợp các hệ số tối ưu rất có thể là một tập hợp con của các biến hồi quy mà tôi đã sử dụng ban đầu, đây là hệ quả của phương pháp Lasso thu nhỏ số lượng hồi quy được sử dụng.λj=log(T)T|bj|

Là sự hiểu biết của tôi và mã chính xác?


2
Bạn có thể sử dụng đánh dấu LATEX trong bài đăng của mình, kèm theo ký hiệu đô la. $\alpha$trở thành . Hãy làm điều này, vì nó sẽ khiến mọi người dễ hiểu câu hỏi của bạn hơn, và do đó trả lời nó. α
Sycorax nói phục hồi Monica

Câu trả lời:


15

Từ glmnettài liệu ( ?glmnet), chúng tôi thấy rằng có thể thực hiện co rút vi sai. Điều này giúp chúng tôi ít nhất là một phần để trả lời câu hỏi của OP.

penalty.factor: Các yếu tố hình phạt riêng biệt có thể được áp dụng cho từng hệ số. Đây là một số nhân lambdacho phép thu nhỏ vi sai. Có thể là 0 đối với một số biến, hàm ý không co ngót và biến đó luôn được đưa vào mô hình. Mặc định là 1 cho tất cả các biến (và hoàn toàn vô tận cho các biến được liệt kê trong exclude). Lưu ý: các yếu tố hình phạt được định cỡ lại nội bộ để tổng hợp nvarslambdatrình tự sẽ phản ánh sự thay đổi này.

Tuy nhiên, để trả lời đầy đủ câu hỏi, tôi nghĩ rằng có hai cách tiếp cận dành cho bạn, tùy thuộc vào những gì bạn muốn thực hiện.

  1. glmnetλpenalty.factorλbjϕj=logTT|bj|ϕjbjpenalty.factorCϕj=ϕjm=Cj=1mlogTT|bj|ϕjϕjCϕjglmnetλ=1coef(model, s=1, exact=T)

  2. glmnetkλλ=0bλλ

glmnetλλcoef(fits,s=something)λsomethingλ

λcv.glmnetglmnetpenalty.factor

Thủ tục này tối ưu hóa

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

ϕjjthpenalty.factorλϕjλϕλϕλbλ

Về cơ bản, đây là động lực của glmnettôi hiểu: sử dụng hồi quy bị phạt để ước tính mô hình hồi quy không quá lạc quan về hiệu suất ngoài mẫu của nó. Nếu đây là mục tiêu của bạn, có lẽ đây là phương pháp phù hợp với bạn.


+1 Điều này đúng. Tôi cũng sẽ nói thêm rằng việc bình thường hóa hồi quy có thể được xem như là một sự bay bổng trước đó, tức là tối đa một posteriori (MAP) là khả năng tối đa thường xuyên (ML). Làm việc trong khuôn khổ đó giúp bản thân linh hoạt hơn trong việc chính quy hóa cần thiết.
TLJ

Nếu tôi chạy, pnlty = log(24)/(24*betas); fits = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty) làm thế nào để tôi trích xuất betas biến hồi quy tương ứng với lambda mà tôi đã chỉ định, vì lambda khác nhau cho mọi yếu tố rủi ro?
Dom

1
@Dom Tôi nhận ra một chút quá muộn rằng có một cách rõ ràng để có được chính xác những gì bạn muốn sử dụng glmnet. Xem câu trả lời sửa đổi của tôi.
Sycorax nói phục hồi Monica

2
Cảnh giác với việc tùy chỉnh hình phạt riêng cho từng người dự đoán. Điều đó sẽ không có gì nhiều ngoài lựa chọn biến từng bước trong một số trường hợp. Hồi quy hình phạt giảm có nghĩa là lỗi bình phương bằng cách giả sử số lượng tham số hình phạt rất hạn chế và thông tin vay mượn trên các yếu tố dự đoán.
Frank Harrell

2
@FrankHarrell Cảm ơn bạn đã bình luận! Dường như việc sử dụng các hình phạt khác nhau cho mỗi người dự đoán sẽ tương đương với mô hình Bayes, giả định trước một thông số khác nhau cho mỗi tham số. Điều đó không gây ấn tượng với tôi khi đặt ra một mối nguy hiểm độc nhất đối với suy luận Bayes nói chung. Ngoài ra, bạn có thể giải thích về cách hồi quy bị phạt mượn thông tin qua các yếu tố dự đoán không? Tôi không chắc chắn tôi hoàn toàn nắm bắt được trường hợp như thế nào trong một kịch bản như vậy.
Sycorax nói Phục hồi lại
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.