Nhóm biến phân loại trong glmnet


8

Hãy xem xét sự phù hợp sau đây:

fit3a=glmnet(x,g4,family="multinomial",type.multinomial="grouped")

Làm thế nào để tôi chỉ ra các cột trong xphân loại / đa quốc gia? Có một tùy chọn để xác định chỉ số của các biến được nhóm?

Tài liệu mô tả tùy chọn type.multinomialnhư sau:

Nếu "được nhóm" thì một hình phạt Lasso được nhóm được sử dụng trên các hệ số đa phương thức cho một biến. Điều này đảm bảo tất cả chúng đều ở ngoài cùng nhau. Mặc định là "chưa được nhóm".

Câu trả lời:


13

Hai đối số đầu tiên glmnet()được mong đợi là một ma trận của các yếu tố dự đoán ( x, trong trường hợp của bạn) và một vectơ của phản ứng ( g4, trong trường hợp của bạn). Đối với xma trận, người ta hy vọng rằng bạn đã tìm ra bất kỳ biến phân loại nào. Nói cách khác, glmnet()không thực sự biết liệu có bất kỳ dự đoán nào của bạn là phân loại hay không, bởi vì chúng đã bị loại bỏ.

Nếu dữ liệu của bạn nằm trong khung dữ liệu, một cách tốt để xây dựng xma trận là sử dụng model.matrix()hàm. Nó chấp nhận ngôn ngữ công thức, sẽ tự động loại trừ biến trả lời và sẽ tạo các biến giả cho bất kỳ yếu tố dự đoán nào được xác định là các yếu tố.

Các tùy chọn family="multinomial"type.multinomial="grouped"tham chiếu đến biến trả lời có nhiều hơn 2 kết quả có thể xảy ra. Bạn có thể chuyển vào biến trả lời ( g4) làm yếu tố.

Các tác giả gói cung cấp một họa tiết đẹp giải thích việc sử dụng glmnet(), mặc dù rất tiếc, nó không đưa ra một ví dụ sử dụng model.matrix()để chuẩn bị xma trận.


1
Một chút muộn cho bữa tiệc, nhưng chỉ cần lưu ý rằng một giới thiệu tốt đẹp khác về glmnet, cùng với một ví dụ sử dụng model.matrix, được đưa ra trong Giới thiệu về Học thống kê. www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf
owen88

12

Như justmarkham chỉ ra, bạn có thể xây dựng ma trận thiết kế xbằng cách sử dụng model.matrix. Lưu ý rằng bạn sẽ muốn loại trừ chặn, vì glmnet bao gồm một mặc định. Bạn cũng có thể muốn thay đổi chức năng tương phản mặc định, theo mặc định sẽ bỏ qua một cấp độ của từng yếu tố (mã hóa điều trị). Nhưng do hình phạt của Lasso, điều này không còn cần thiết cho việc nhận dạng và trên thực tế làm cho việc giải thích các biến được chọn trở nên phức tạp hơn. Để làm điều này, thiết lập

contr.Dummy <- function(contrasts, ...){
   conT <- contr.treatment(contrasts=FALSE, ...)
   conT
}
options(contrasts=c(ordered='contr.Dummy', unordered='contr.Dummy'))

Bây giờ, bất kể cấp độ nào của một yếu tố được chọn, bạn có thể nghĩ về nó như gợi ý rằng các cấp độ cụ thể này quan trọng, so với tất cả các cấp độ bị bỏ qua. Trong học máy, tôi đã thấy mã hóa này được gọi là mã hóa một nóng.

Giả sử g4Kcác mức, type.multinomial="grouped"tùy chọn chỉ định rằng xtất cả các tính năng sẽ nhập mô hình đồng thời cho từng bộ Kdự báo tuyến tính, trái ngược với việc có bộ dự báo tuyến tính cho mỗi lớp (nói chung) có các tính năng riêng. glmnetkhông (hiện tại?) hỗ trợ hình phạt loại nhóm của người dự đoán ( xma trận). Gói grplassonày có, nhưng được viết bằng R thuần túy, vì vậy chậm hơn glmnet, nhưng bạn có thể thử.


Có lẽ bạn có thể giải thích điều này một chút khác nhau? Hoặc (quan trọng hơn) có lẽ bạn có thể cung cấp cái nhìn sâu sắc cho câu hỏi liên quan của tôi: stats.stackexchange.com/questions/238623/iêu
bác sĩ lâm sàng

Xin chào @AndrewM, model.matrixkhông loại trừ bất kỳ cấp nào khỏi biến phân loại đầu tiên khi chúng tôi bỏ qua phần chặn. Ma trận thiết kế nên là một đầu vào trong glmnetbất kể? và làm thế nào để chúng tôi giải thích mức độ không xác định của biến phân loại đầu tiên trong hồi quy lasso?
Goldman Clarck
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.