การถดถอยโลจิสติก glmnet สามารถจัดการตัวแปรตัวประกอบ (หมวดหมู่) ได้โดยตรงโดยไม่ต้องใช้ตัวแปรจำลองหรือไม่? [ปิด]


15

ฉันกำลังสร้างการถดถอยโลจิสติกใน R โดยใช้วิธี LASSO ด้วยฟังก์ชั่นcv.glmnetสำหรับการเลือกlambdaและglmnetสำหรับรุ่นสุดท้าย

ฉันรู้ข้อเสียทั้งหมดเกี่ยวกับการเลือกรุ่นอัตโนมัติแล้ว แต่ฉันต้องทำต่อไป

ปัญหาของฉันคือฉันต้องรวมตัวแปรปัจจัย (หมวดหมู่) ในแบบจำลองมีวิธีใดที่จะทำได้โดยไม่ต้องสร้างตัวแปรจำลองจำนวนมากหรือไม่ ตัวแปรนี้เกือบทุกสายและไม่ใช่ตัวเลข


2
ฉันอยากรู้วิธีที่ดีที่สุดที่จะไปเกี่ยวกับเรื่องนี้เช่นกัน
วิทยาศาสตร์ด้านป่าไม้

คำตอบ:


26

glmnet ไม่สามารถรับปัจจัยโดยตรงได้คุณต้องเปลี่ยนตัวแปรปัจจัยให้เป็นแบบจำลอง เป็นเพียงขั้นตอนเดียวเท่านั้นที่ใช้ model.matrix ตัวอย่างเช่น:

x_train <- model.matrix( ~ .-1, train[,features])
lm = cv.glmnet(x=x_train,y = as.factor(train$y), intercept=FALSE ,family =   "binomial", alpha=1, nfolds=7)
best_lambda <- lm$lambda[which.min(lm$cvm)]

alpha = 1 จะสร้าง LASSO


1
+1 คำตอบยอดเยี่ยม! ฉันขอถามได้ไหมว่าทำไมคุณหรือใครทำไมจึงใช้ intercept = FALSE
Erosennin

สิ่งนี้ดูเหมือนจะล้มเหลวเมื่อมีตัวแปรเด็ดขาดสองรายการ: ฉันได้รับคอลัมน์ L1 อย่างถูกต้องถ้า var1 มีระดับ L1 แต่คอลัมน์ L2-1 สำหรับ var2 (ซึ่งมีระดับ L2)
Peter Straka

@Peter Straka: ผลรวม (มากกว่า L1 Dummies สำหรับ var1) = 1 สำหรับบันทึกทั้งหมดและผลรวม (มากกว่า L2 Dummies สำหรับ V2) = 1 สำหรับบันทึกทั้งหมดดังนั้น L1 Dummies สำหรับ var1 และ L2 Dummies สำหรับ var2 จะขึ้นอยู่กับแบบเส้นตรง อย่างน้อยหนึ่งใน Dummies L2 Dummies สำหรับ var2 นั้นซ้ำซ้อน (สำหรับวัตถุประสงค์ในการสร้างแบบจำลองเชิงเส้น)
VictorZurkowski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.