Làm thế nào để giải thích Lasso thu nhỏ tất cả các hệ số về 0?


8

Tôi đã có một bộ dữ liệu với 338 dự đoán và 570 trường hợp (không thể tải lên một cách đáng tiếc) mà tôi đang sử dụng Lasso để thực hiện lựa chọn tính năng. Cụ thể, tôi đang sử dụng cv.glmnethàm từ glmnetnhư sau, trong đó mydata_matrixcó ma trận nhị phân 570 x 339 và đầu ra cũng là nhị phân:

library(glmnet)
x_dat <- mydata_matrix[, -ncol(mydata_matrix)]
y <- mydata_matrix[, ncol(mydata_matrix)]
cvfit <- cv.glmnet(x_dat, y, family='binomial')

Biểu đồ này cho thấy độ lệch thấp nhất xảy ra khi tất cả các biến đã bị xóa khỏi mô hình. Đây có thực sự nói rằng chỉ cần sử dụng đánh chặn là dự đoán kết quả nhiều hơn là sử dụng ngay cả một công cụ dự đoán duy nhất, hoặc tôi đã mắc lỗi, có thể trong dữ liệu hoặc trong lệnh gọi hàm?

Điều này tương tự như một câu hỏi trước đó , nhưng không nhận được bất kỳ câu trả lời nào.

plot(cvfit)

nhập mô tả hình ảnh ở đây


1
Tôi nghĩ rằng liên kết này có thể bổ sung một số chi tiết. Về bản chất, nó có thể có nghĩa là nhiều (nếu không phải tất cả) dự đoán của bạn không đáng kể lắm. Các chủ đề dưới đây giải thích điều này trong một số chi tiết hơn. stats.stackexchange.com/questions/182595/ Mạnh
Dhiraj

3
@Dhiraj Đáng kể là một thuật ngữ kỹ thuật liên quan đến thử nghiệm ý nghĩa giả thuyết null. Nó không thích hợp ở đây.
Matthew Drury

Câu trả lời:


11

Tôi không nghĩ rằng bạn đã phạm sai lầm trong mã. Đây là một vấn đề của việc giải thích đầu ra.

Lasso không chỉ ra các biến hồi quy riêng lẻ nào "dễ dự đoán" hơn các biến khác. Nó chỉ đơn giản là có xu hướng tích hợp để ước tính các hệ số là 0. Hệ số hình phạt càng lớn thì xu hướng đó càng lớn.log(λ)

Biểu đồ xác thực chéo của bạn cho thấy rằng càng nhiều hệ số bị buộc về 0, mô hình thực hiện công việc tốt hơn và tốt hơn để dự đoán các tập hợp con của các giá trị đã được xóa ngẫu nhiên khỏi bộ dữ liệu. Khi các lỗi dự đoán được xác thực chéo tốt nhất (được đo là "Độ lệch nhị phân" ở đây) đạt được khi tất cả các hệ số bằng 0, bạn nên nghi ngờ rằng không có sự kết hợp tuyến tính nào của bất kỳ tập hợp con nào của biến hồi quy có thể hữu ích để dự đoán kết quả.

Bạn có thể xác minh điều này bằng cách tạo các phản hồi ngẫu nhiên độc lập với tất cả các biến hồi quy và áp dụng quy trình phù hợp của bạn với chúng. Đây là một cách nhanh chóng để mô phỏng tập dữ liệu của bạn:

n <- 570
k <- 338
set.seed(17)
X <- data.frame(matrix(floor(runif(n*(k+1), 0, 2)), nrow=n,
                       dimnames=list(1:n, c("y", paste0("x", 1:k)))))

Khung dữ liệu Xcó một cột nhị phân ngẫu nhiên có tên là "y" và 338 cột nhị phân khác (tên của chúng không quan trọng). Tôi đã sử dụng cách tiếp cận của bạn để hồi quy "y" chống lại các biến đó, nhưng - chỉ cần cẩn thận - tôi đã đảm bảo rằng vectơ phản hồi yvà ma trận mô hình xkhớp với nhau (điều mà chúng có thể không làm trong trường hợp có bất kỳ giá trị bị thiếu nào trong dữ liệu) :

f <- y ~ . - 1            # cv.glmnet will include its own intercept
M <- model.frame(f, X)
x <- model.matrix(f, M)
y <- model.extract(M, "response")
fit <- cv.glmnet(x, y, family="binomial")

Kết quả rất giống với bạn:

plot(fit)

Nhân vật

Thật vậy, với những dữ liệu hoàn toàn ngẫu nhiên này, Lasso vẫn trả về chín ước tính hệ số khác không (mặc dù chúng ta biết, bằng cách xây dựng, các giá trị chính xác đều bằng không). Nhưng chúng ta không nên mong đợi sự hoàn hảo. Hơn nữa, vì sự phù hợp dựa trên việc loại bỏ ngẫu nhiên các tập hợp con của dữ liệu để xác thực chéo, thông thường bạn sẽ không nhận được cùng một đầu ra từ lần chạy này đến lần chạy tiếp theo. Trong ví dụ này, một cuộc gọi thứ hai để cv.glmnettạo ra sự phù hợp chỉ với một hệ số khác không. Vì lý do này, nếu bạn có thời gian, luôn luôn nên chạy lại quy trình lắp đặt nhiều lần và theo dõi các ước tính hệ số nào là không khác nhau. Đối với những dữ liệu này - với hàng trăm biến hồi quy - việc này sẽ mất vài phút để lặp lại chín lần nữa.

sim <- cbind(as.numeric(coef(fit)), 
             replicate(9, as.numeric(coef(cv.glmnet(x, y, family="binomial")))))
plot(1:k, rowMeans(sim[-1,] != 0) + runif(k, -0.025, 0.025), 
     xlab="Coefficient Index", ylab="Frequency not zero (jittered)",
     main="Results of Repeated Cross-Validated Lasso Fits")

Hình 2

Tám trong số các biến hồi quy này có ước tính khác không trong khoảng một nửa số phù hợp; phần còn lại của họ không bao giờ có ước tính khác không. Điều này cho thấy mức độ nào Lasso vẫn sẽ bao gồm các ước tính hệ số khác không ngay cả khi bản thân các hệ số thực sự bằng không.


1

Nếu bạn muốn có thêm thông tin có thể sử dụng chức năng

fit1<-glmnet(x_dat, y, family='binomial', alpha= x)

plot(fit1, xvar = "lambda", label = TRUE)

Biểu đồ phải tương tự như nhập mô tả hình ảnh ở đây Nhãn cho phép xác định hiệu ứng của lambda cho các biến hồi quy.

Bạn có thể sử dụng giá trị differents của x (trong mô hình được gọi là hệ số alpha) đến 0 (hồi quy sườn) đến 1 (LASSO Regression). Giá trị [0,1] là hồi quy thuần đàn hồi


Giảm alpha xuống 0,5 đã giúp bao gồm nhiều biến hơn, nhờ vào mẹo.
Stuart Lacy

0

Câu trả lời rằng không có sự kết hợp tuyến tính của các biến hữu ích trong việc dự đoán kết quả là đúng trong một số trường hợp nhưng không phải tất cả các trường hợp.

Tôi đã có một cốt truyện giống như ở trên, nguyên nhân là do tính đa hướng trong dữ liệu của tôi. Việc giảm các mối tương quan cho phép Lasso hoạt động nhưng nó cũng loại bỏ thông tin hữu ích về kết quả. Các bộ biến tốt hơn đã thu được bằng cách sử dụng tầm quan trọng của rừng ngẫu nhiên cho các biến màn hình và sau đó sử dụng Lasso.


-1

Điều đó có thể nhưng một chút ngạc nhiên. LASSO có thể làm những điều kỳ lạ khi bạn có cộng tuyến, trong trường hợp đó có lẽ bạn nên đặt alpha <1 để thay vào đó bạn lắp lưới đàn hồi. Bạn có thể chọn alpha bằng cách xác thực chéo nhưng đảm bảo rằng bạn đang sử dụng cùng một nếp gấp cho mỗi giá trị của alpha.

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.