Lasso vs Lasso thích nghi


12

LASSO và LASSO thích ứng là hai thứ khác nhau, phải không? (Đối với tôi, các hình phạt trông khác nhau, nhưng tôi chỉ kiểm tra xem tôi có bỏ sót điều gì không.)

Khi bạn thường nói về lưới đàn hồi, trường hợp đặc biệt LASSO hay LASSO thích ứng?

Gói glmnet nào thực hiện, với điều kiện bạn chọn alpha = 1?

LASSO thích ứng hoạt động trong điều kiện nhẹ hơn, phải không? Cả hai đều có tài sản orory trong dữ liệu phù hợp, phải không?

Câu trả lời:


15

Câu trả lời ngắn gọn cho câu hỏi của bạn:

  • Lasso và Lasso thích nghi là khác nhau. (Kiểm tra Zou (2006) để xem Lasso thích nghi khác với Lasso tiêu chuẩn như thế nào.)
  • Lasso là một trường hợp đặc biệt của lưới đàn hồi. (Xem Zou & Hastie (2005) .)
    Lasso thích nghi không phải là trường hợp đặc biệt của lưới đàn hồi.
    Lưới đàn hồi không phải là trường hợp đặc biệt của Lasso hay Lasso thích ứng.
  • Chức năng glmnettrong gói "glmnet" trong R thực hiện lasso (không phải lasso thích ứng) cho alpha=1.
  • Lasso có làm việc trong điều kiện nhẹ hơn so với Lasso thích nghi không? Tôi không thể trả lời câu hỏi này (nên kiểm tra Zou (2006) để biết thông tin chi tiết).
  • Chỉ có Lasso thích nghi (nhưng không phải lasso hoặc lưới đàn hồi) có thuộc tính orory. (Xem Zou (2006) .)

Người giới thiệu:


12

Giải pháp LASSO là giải pháp giảm thiểu

Q(β|X,y)=12n||yXβ||2+λj|βj|

Lasso thích ứng chỉ đơn giản là thêm trọng lượng vào điều này để cố gắng chống lại vấn đề đã biết về ước tính LASSO bị sai lệch.

Qa(β|X,y,w)=12n||yXβ||2+λjwj|βj|

wj=1/β~jβ~jβλ

wj(λ)=w(β~j(λ))
glmnetpenalty.factorglmnet

Bạn đã quên mất các giá trị tuyệt đối trong các điều khoản phạt.
Richard Hardy

|β|γγβ

Vì vậy, về cơ bản, glmnet thực hiện LASSO hoặc lưới đàn hồi theo mặc định, nhưng bạn có thể chuyển đổi nó thành LASSO thích ứng (hoặc EN) bằng cách chỉ định trọng lượng phù hợp? Nếu đây là trường hợp, cảm ơn một triệu!
Xác thực Mr

@MrValidation, lưu ý rằng các tác giả của các phương pháp mới như lasso thích nghi có thể có mã cho phương thức trên trang web của họ (đôi khi họ chỉ đưa ra một tham chiếu đến gói R mà chính họ đã viết).
Richard Hardy

1
Tôi nghĩ rằng đối số trọng số trong glmnet đề cập đến các trọng số cho các quan sát và không phải các trọng số cho các hình phạt
jmb

3

LASSO thích ứng được sử dụng để lựa chọn biến nhất quán. Các vấn đề chúng tôi gặp phải khi sử dụng LASSO cho lựa chọn biến là:

  • Tham số co rút phải lớn hơn để lựa chọn so với dự đoán
  • Các tham số khác không lớn sẽ quá nhỏ để độ lệch quá lớn
  • Các thông số khác không nhỏ có thể được phát hiện một cách nhất quán
  • Tương quan cao giữa các yếu tố dự đoán dẫn đến hiệu suất lựa chọn kém

Do đó, LASSO chỉ nhất quán cho lựa chọn biến trong một số điều kiện về tham số co rút, tham số (điều kiện beta-min) và tương quan (điều kiện không thể so sánh được). Xem trang 101-106 của luận án thạc sĩ của tôi để được giải thích chi tiết.

LASSO thường bao gồm quá nhiều biến khi chọn tham số điều chỉnh để dự đoán nhưng mô hình thực sự rất có thể là tập hợp con của các biến này. Điều này cho thấy sử dụng giai đoạn ước tính thứ cấp như LASSO thích nghi, điều khiển độ lệch của ước tính LASSO bằng cách sử dụng tham số điều chỉnh tối ưu dự đoán. Điều này dẫn đến lựa chọn phù hợp (hoặc tài sản orory) mà không có các điều kiện được đề cập ở trên.

Bạn có thể sử dụng glmnet cho LASSO thích ứng. Trước tiên, bạn cần một ước tính ban đầu, ít nhất là bình phương, sườn núi hoặc thậm chí là ước tính LASSO, để tính trọng số. Sau đó, bạn có thể triển khai LASSO thích ứng bằng cách nhân rộng ma trận X. Dưới đây là một ví dụ sử dụng ước tính ban đầu bình phương tối thiểu trên dữ liệu đào tạo:

# get data
y <- train[, 11]
x <- train[, -11]
x <- as.matrix(x)
n <- nrow(x)

# standardize data
ymean <- mean(y)
y <- y-mean(y)  
xmean <- colMeans(x)
xnorm <- sqrt(n-1)*apply(x,2,sd)
x <- scale(x, center = xmean, scale = xnorm)

# fit ols 
lm.fit <- lm(y ~ x)
beta.init <- coef(lm.fit)[-1] # exclude 0 intercept

# calculate weights
w  <- abs(beta.init)  
x2 <- scale(x, center=FALSE, scale=1/w)  

# fit adaptive lasso
require(glmnet)
lasso.fit <- cv.glmnet(x2, y, family = "gaussian", alpha = 1, standardize = FALSE, nfolds = 10)
beta <- predict(lasso.fit, x2, type="coefficients", s="lambda.min")[-1]

# calculate estimates
beta <- beta * w / xnorm # back to original scale
beta <- matrix(beta, nrow=1)
xmean <- matrix(xmean, nrow=10)
b0 <- apply(beta, 1, function(a) ymean - a %*% xmean) # intercept
coef <- cbind(b0, beta)
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.