Một ví dụ về cách làm vani đồng bằng cross-validation cho Lasso ở glmnet
trên mtcars
tập dữ liệu.
Tải tập dữ liệu.
Chuẩn bị các tính năng (biến độc lập). Họ nên là của matrix
lớp. Cách dễ nhất để chuyển đổi df
có chứa các biến phân loại thành matrix
thông qua model.matrix
. Theo bạn, mặc định glmnet
phù hợp với việc chặn, vì vậy bạn nên chặn dải tốt hơn khỏi ma trận mô hình.
Chuẩn bị phản ứng (biến phụ thuộc). Hãy mã hóa những chiếc xe có mpg
hiệu suất trên trung bình là hiệu quả ('1') và phần còn lại là không hiệu quả ('0'). Chuyển đổi biến này thành yếu tố.
Chạy xác thực chéo qua cv.glmnet
. Nó sẽ lấy alpha=1
từ glmnet
các tham số mặc định , đó là những gì bạn đã yêu cầu: hồi quy lasso.
Bằng cách kiểm tra đầu ra của xác thực chéo, bạn có thể quan tâm đến ít nhất 2 thông tin:
Vui lòng xem mã R theo hướng dẫn ở trên:
# Load data set
data("mtcars")
# Prepare data set
x <- model.matrix(~.-1, data= mtcars[,-1])
mpg <- ifelse( mtcars$mpg < mean(mtcars$mpg), 0, 1)
y <- factor(mpg, labels = c('notEfficient', 'efficient'))
library(glmnet)
# Run cross-validation
mod_cv <- cv.glmnet(x=x, y=y, family='binomial')
mod_cv$lambda.1se
[1] 0.108442
coef(mod_cv, mod_cv$lambda.1se)
1
(Intercept) 5.6971598
cyl -0.9822704
disp .
hp .
drat .
wt .
qsec .
vs .
am .
gear .
carb .
mod_cv$lambda.min
[1] 0.01537137
coef(mod_cv, mod_cv$lambda.min)
1
(Intercept) 6.04249733
cyl -0.95867199
disp .
hp -0.01962924
drat 0.83578090
wt .
qsec .
vs .
am 2.65798203
gear .
carb -0.67974620
Nhận xét cuối cùng:
lưu ý, đầu ra của mô hình không nói gì về ý nghĩa thống kê của các hệ số, chỉ các giá trị.
penalizer l1 (Lasso), mà bạn yêu cầu, là khét tiếng cho sự bất ổn như được minh chứng trong này bài viết trên blog và stackexchange này câu hỏi . Một cách tốt hơn có thể là xác nhận chéo alpha
cũng vậy, điều này sẽ cho phép bạn quyết định kết hợp đúng các hình phạt l1 và l2.
một cách khác để xác thực chéo có thể là chuyển sang dấu mũ train( ... method='glmnet')
và cuối cùng, cách tốt nhất để tìm hiểu thêm về cv.glmnet
và mặc định đến từ glmnet
tất nhiên là ?glmnet
trong bảng điều khiển của R)))