Trong R, có phải glmnet không phù hợp?


10

Tôi đang lắp một mô hình tuyến tính trong R bằng cách sử dụng glmnet. Mô hình ban đầu (không chính quy) được trang bị bằng cách sử dụng lmvà không có một thuật ngữ không đổi (nghĩa là nó ở dạng lm(y~0+x1+x2,data)).

glmnetcó một ma trận của các yếu tố dự đoán và một vectơ phản ứng. Tôi đã đọc glmnettài liệu và không thể thấy đề cập đến thuật ngữ không đổi.

Vì vậy, có cách nào để yêu cầu glmnetbuộc phù hợp tuyến tính thông qua nguồn gốc?

Câu trả lời:


12

Có, một phần chặn được bao gồm trong mô hình glmnet , nhưng nó không được chuẩn hóa (xem Đường dẫn chính quy cho các mô hình tuyến tính tổng quát thông qua tọa độ gốc , trang 13). Thông tin chi tiết về việc triển khai chắc chắn có thể thu được bằng cách xem xét kỹ mã (đối với họ gaussian, đó là elnet()hàm được gọi bởi glmnet()), nhưng nó nằm trong Fortran.

Bạn có thể thử gói bị phạt , cho phép loại bỏ chặn bằng cách chuyển unpenalized = ~0đến penalized().

> x <- matrix(rnorm(100*20),100,20)
> y <- rnorm(100)
> fit1 <- penalized(y, penalized=x, unpenalized=~0, 
                    standardize=TRUE) 
> fit2 <- lm(y ~ 0+x)
> plot((coef(fit1) + coef(fit2))/2, coef(fit2)-coef(fit1))

Để có được sự chính quy hóa của Lasso, bạn có thể thử một cái gì đó như

> fit1b <- penalized(y, penalized=x, unpenalized=~0, 
                     standardize=TRUE, lambda1=1, steps=20)
> show(fit1b)
> plotpath(fit1b)

Như có thể thấy trong hình tiếp theo, có rất ít sự khác biệt giữa các tham số hồi quy được tính toán bằng cả hai phương thức (bên trái) và bạn có thể vẽ giải pháp đường dẫn Lasso rất dễ dàng (phải).

văn bản thay thế

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.