Tôi đang sử dụng gói 'lars' trong R với mã sau:
> library(lars)
> set.seed(3)
> n <- 1000
> x1 <- rnorm(n)
> x2 <- x1+rnorm(n)*0.5
> x3 <- rnorm(n)
> x4 <- rnorm(n)
> x5 <- rexp(n)
> y <- 5*x1 + 4*x2 + 2*x3 + 7*x4 + rnorm(n)
> x <- cbind(x1,x2,x3,x4,x5)
> cor(cbind(y,x))
y x1 x2 x3 x4 x5
y 1.00000000 0.74678534 0.743536093 0.210757777 0.59218321 0.03943133
x1 0.74678534 1.00000000 0.892113559 0.015302566 -0.03040464 0.04952222
x2 0.74353609 0.89211356 1.000000000 -0.003146131 -0.02172854 0.05703270
x3 0.21075778 0.01530257 -0.003146131 1.000000000 0.05437726 0.01449142
x4 0.59218321 -0.03040464 -0.021728535 0.054377256 1.00000000 -0.02166716
x5 0.03943133 0.04952222 0.057032700 0.014491422 -0.02166716 1.00000000
> m <- lars(x,y,"step",trace=T)
Forward Stepwise sequence
Computing X'X .....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 4 added
LARS Step 3 : Variable 3 added
LARS Step 4 : Variable 2 added
LARS Step 5 : Variable 5 added
Computing residuals, RSS etc .....
Tôi đã có một bộ dữ liệu với 5 biến liên tục và tôi đang cố gắng khớp một mô hình với một biến (phụ thuộc) y. Hai trong số các dự đoán của tôi có mối tương quan cao với nhau (x1, x2).
Như bạn có thể thấy trong ví dụ trên, hàm lars với tùy chọn 'stepwise' trước tiên chọn biến tương quan nhất với y. Biến tiếp theo để vào mô hình là biến tương quan nhất với phần dư. Thật vậy, nó là x4:
> round((cor(cbind(resid(lm(y~x1)),x))[1,3:6]),4)
x2 x3 x4 x5
0.1163 0.2997 0.9246 0.0037
Bây giờ, nếu tôi thực hiện tùy chọn 'lasso':
> m <- lars(x,y,"lasso",trace=T)
LASSO sequence
Computing X'X ....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 2 added
LARS Step 3 : Variable 4 added
LARS Step 4 : Variable 3 added
LARS Step 5 : Variable 5 added
Nó thêm cả hai biến tương quan vào mô hình trong hai bước đầu tiên. Điều này trái ngược với những gì tôi đọc trong một số bài báo. Hầu hết sau đó nói rằng nếu có một nhóm biến trong đó các mối tương quan là rất cao, thì 'lasso' có xu hướng chỉ chọn một biến trong nhóm một cách ngẫu nhiên.
Ai đó có thể cung cấp một ví dụ về hành vi này? Hoặc giải thích, tại sao các biến x1, x2 của tôi được thêm vào mô hình lần lượt (cùng nhau)?
R
cuộc gọi mà OP đang thực hiện và đầu ra liên quan mà anh ấy cung cấp, bạn sẽ thấy rằng anh ấy thực sự đang sử dụng Lasso. Như tôi chắc chắn bạn biết, một điều chỉnh nhỏ của thuật toán lars mang lại đường dẫn chính quy hóa Lasso.