1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Machine Learning với caret trong R

Connected

Bài tập

glmnet với trainControl và tinh chỉnh tùy chỉnh

Như bạn đã thấy trong video, mô hình glmnet thực tế khớp rất nhiều mô hình cùng lúc (điểm mạnh của gói này). Bạn có thể tận dụng điều đó bằng cách truyền vào một tập giá trị lambda lớn, vốn điều khiển mức phạt trong mô hình. train() đủ thông minh để chỉ khớp một mô hình cho mỗi giá trị alpha và truyền tất cả các giá trị lambda cùng lúc để huấn luyện đồng thời.

Lưới tinh chỉnh ưa thích của tôi cho các mô hình glmnet là:

expand.grid(
  alpha = 0:1,
  lambda = seq(0.0001, 1, length = 100)
)

Lưới này khảo sát một số lượng lớn giá trị lambda (thực tế là 100), từ rất nhỏ đến rất lớn. (Bạn có thể tăng lambda lớn nhất lên 10, nhưng trong bài tập này 1 là cận trên hợp lý.)

Nếu bạn muốn khảo sát ít mô hình hơn, bạn có thể dùng một dãy lambda ngắn hơn. Ví dụ, lambda = seq(0.0001, 1, length = 10) sẽ khớp 10 mô hình cho mỗi giá trị alpha.

Với tuneGrid này bạn cũng xem xét hai dạng mô hình có phạt: hồi quy ridge và hồi quy lasso. alpha = 0 là ridge thuần, và alpha = 1 là lasso thuần. Bạn có thể khớp một hỗn hợp của hai mô hình (tức elastic net) bằng cách dùng alpha giữa 0 và 1. Chẳng hạn, alpha = 0.05 tương ứng 95% ridge và 5% lasso.

Trong bài này bạn sẽ chỉ khám phá 2 cực trị – ridge thuần và lasso thuần – nhằm minh họa sự khác nhau giữa chúng.

Hướng dẫn

100 XP
  • Huấn luyện một mô hình glmnet trên dữ liệu overfit sao cho y là biến phản hồi và tất cả biến còn lại là biến giải thích. Nhớ dùng trainControl tùy chỉnh từ bài trước (myControl). Đồng thời, dùng tuneGrid tùy chỉnh để khảo sát alpha = 0:1 và 20 giá trị lambda giữa 0.0001 và 1 cho mỗi giá trị alpha.
  • In model ra bảng điều khiển.
  • In max() của thống kê ROC trong model[["results"]]. Bạn có thể truy cập nó bằng model[["results"]][["ROC"]].