Nếu đa cộng tuyến cao, hệ số LASSO sẽ giảm về 0?


9

Cho , hành vi lý thuyết của các hệ số LASSO là gì và tại sao?x2=2x1

Một trong số hoặc thu nhỏ về hoặc cả hai?x 2 0x1x20

require(glmnet)
x1 = runif(100, 1, 2)
x2 = 2*x1
x_train = cbind(x1, x2)
y = 100*x1 + 100 + runif(1)
ridge.mod = cv.glmnet(x_train, y, alpha = 1)
coef(ridge.mod)

#3 x 1 sparse Matrix of class "dgCMatrix"
#                       1
#(Intercept) 1.057426e+02
#x1          9.680073e+01
#x2          3.122502e-15

2
Tôi không chắc đây có phải là một mô phỏng tốt hay không bởi vì cả hai hệ số trên thực tế đều bằng không. Thật thú vị hơn khi xem xét hành vi của các ước tính hệ số khi có mối quan hệ thực sự.
DSaxton

1
Mô phỏng được cải thiện. Tôi cung cấp các mô phỏng bởi vì tôi muốn giải thích câu hỏi của tôi là gì. Tôi chỉ quan tâm đến kết quả lý thuyết của câu hỏi này.
John Hass

1
Tôi nghĩ rằng hành vi sẽ không thể đoán trước được vì mô hình không thể xác định được. Đó là, làm thế nào để quy trình phù hợp mô hình có thể biết ví dụ và thay vì và ? Không thể, bởi vì hoặc là "chính xác." β 2 = 0 β 1 = 0 β 2 = 50β1=100β2=0β1=0β2=50
DSaxton

Tôi đồng ý với lý luận của bạn. Có một cách toán học để mô tả nó?
John Hass

1
Tôi nghĩ bạn có nghĩa là y = 100*x1 + 100 + runif(100), nếu không, bạn nhận được một số ngẫu nhiên duy nhất được tái chế và thêm đồng nhất vào tất cả các mục khác.
Firebug

Câu trả lời:


8

Lưu ý rằng

yXβ22+λβ1=yβ1x1β2x222+λ(|β1|+|β2|)=y(β1+2β2)x122+λ(|β1|+|β2|).

Đối với mọi giá trị cố định của hệ số , hình phạtđược giảm thiểu khi . Điều này là do hình phạt trên có trọng số gấp đôi ! Để đặt ký hiệu này,đáp ứng đối với bất kỳ . Do đó, công cụ ước tính Lasso β1+2β2|β1|+|β2|β1=0β1

β~=argminβ:β1+2β2=K|β1|+|β2|
β~1=0K
β^=argminβRpyXβ22+λβ1=argminβRpy(β1+2β2)x122+λ(|β1|+|β2|)=argβminKRminβRp:β1+2β2=KyKx122+λ(|β1|+|β2|)=argβminKR{yKx122+λminβRp:β1+2β2=K{(|β1|+|β2|)}}
thỏa mãn . Lý do tại sao các ý kiến ​​cho câu hỏi của OP là sai lệch là bởi vì có một hình phạt đối với mô hình: những điều đóβ^1=0(0,50)và hệ số cho cùng một lỗi, nhưng chỉ tiêu khác nhau ! Hơn nữa, không cần thiết phải xem xét bất cứ điều gì như LAR: kết quả này ngay lập tức từ các nguyên tắc đầu tiên.(100,0)1

Như được chỉ ra bởi Fireorms, lý do tại sao mô phỏng của bạn cho thấy kết quả trái ngược nhau là glmnettự động chia tỷ lệ thành đơn vị phương sai của các tính năng. Đó là, do việc sử dụng glmnet, chúng tôi thực sự có hiệu quả trong trường hợp . Ở đó, công cụ ước tính không còn là duy nhất: và đều nằm trong arg min. Thật vậy, nằm trong với mọi sao cho .x1=x2(100,0)(0,100)(a,b)argmina,b0a+b=100

Trong trường hợp các tính năng bằng nhau này, glmnetsẽ hội tụ chính xác trong một lần lặp: nó làm mềm ngưỡng hệ số thứ nhất và sau đó hệ số thứ hai được ngưỡng mềm bằng không.

Điều này giải thích tại sao cụ thể mô phỏng tìm thấy . Thật vậy, hệ số thứ hai sẽ luôn bằng không, bất kể thứ tự của các tính năng.β^2=0

Chứng minh: Giả sử WLOG rằng tính năng thỏa mãn . Phối hợp gốc (thuật toán được sử dụng bởi ) tính toán cho lần lặp đầu tiên: theo sau là trong đó . Sau đó, vìxRnx2=1glmnet

β^1(1)=Sλ(xTy)
β^2(1)=Sλ[xT(yxSλ(xTy))]=Sλ[xTyxTx(xTy+T)]=Sλ[T]=0,
T={λ if xTy>λλ if xTy<λ0 otherwiseβ^2(1)=0, lần lặp thứ hai của gốc tọa độ sẽ lặp lại các tính toán ở trên. Theo cách tự nhiên, chúng ta thấy rằng cho tất cả các lần lặp và . Do đó, sẽ báo cáo và vì tiêu chí dừng ngay lập tức đạt được.β^j(i)=β^j(i)ij{1,2}glmnetβ^1=β^1(1)β^2=β^2(1)

2
glmnetcó tính năng mở rộng theo mặc định, tôi khá chắc chắn. Vì vậy, và trở nên giống nhau trong mô hình. x1x2
Firebug

2
Thay vào đó, hãy thử điều này: ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Firebird

2
Điều đó đã làm nó! Suy nghĩ tuyệt vời, @Fireorms! Bây giờ hệ số của thực sự trở thành ước tính bằng không. Cảm ơn bạn đã chia sẻ cái nhìn sâu sắc của bạn! x1
user795305

3

Khi tôi chạy lại mã của bạn, tôi nhận được rằng hệ số không thể phân biệt được bằng số.x2

Để hiểu rõ hơn tại sao LASSO đặt hệ số đó thành 0, bạn nên xem xét mối quan hệ giữa LASSO và Least Angle Regression (LAR). LASSO có thể được coi là một LAR với một sửa đổi đặc biệt.

Thuật toán của LAR đại khái như thế này: Bắt đầu với một mô hình trống (ngoại trừ việc chặn). Sau đó, thêm biến dự đoán tương quan nhất với , giả sử . Thay đổi liên tục hệ số dự đoán đó , cho đến khi còn lại tương quan với và một biến dự đoán khác . Sau đó thay đổi hệ số của cả và cho đến khi dự đoán thứ ba tương quan với còn lại.yxjβjycxjβjxjxkxjxkxlycxjβjxkβk

LASSO có thể được xem là LAR với vòng xoắn sau: ngay khi hệ số của một yếu tố dự đoán trong mô hình của bạn (một yếu tố dự đoán "hoạt động") bằng 0, loại bỏ yếu tố dự đoán đó khỏi mô hình. Đây là điều xảy ra khi bạn hồi quy trên các yếu tố dự đoán cộng tuyến: cả hai sẽ được thêm vào mô hình cùng một lúc và khi hệ số của chúng bị thay đổi, mối tương quan tương ứng của chúng với phần dư sẽ thay đổi theo tỷ lệ, nhưng một trong số các yếu tố dự đoán sẽ bị loại bỏ từ bộ hoạt động đầu tiên vì nó chạm 0 trước. Về phần hai dự đoán cộng tuyến, tôi sẽ không biết. [EDIT: Khi bạn đảo ngược thứ tự và , bạn có thể thấy rằng hệ số củayx1x2x1được đặt thành không. Vì vậy, thuật toán glmnet dường như chỉ đơn giản là đặt các hệ số đó thành 0 trước tiên được đặt hàng sau trong ma trận thiết kế.]

Một nguồn giải thích chi tiết hơn về những điều này là Chương 3 trong "Các yếu tố của học thống kê" của Friedman, Hastie và Tibshirani.

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.