Một ví dụ về cách làm vani đồng bằng cross-validation cho Lasso ở glmnettrê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 matrixlớp. Cách dễ nhất để chuyển đổi dfcó chứa các biến phân loại thành matrixthông qua model.matrix. Theo bạn, mặc định glmnetphù 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ó mpghiệ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=1từ glmnetcá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 alphacũ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.glmnetvà mặc định đến từ glmnettất nhiên là ?glmnettrong bảng điều khiển của R)))