Kann die logistische Regression von glmnet direkt faktorielle (kategoriale) Variablen verarbeiten, ohne dass Dummy-Variablen benötigt werden? [geschlossen]

15

Ich erstelle eine logistische Regression in R mithilfe der LASSO-Methode mit den Funktionen cv.glmnetzur Auswahl des lambdaund glmnetfür das endgültige Modell.

Ich kenne bereits alle Nachteile in Bezug auf die automatische Modellauswahl, aber ich muss es trotzdem tun.

Mein Problem ist, dass ich Faktor- (kategoriale) Variablen in das Modell aufnehmen muss. Gibt es eine Möglichkeit, dies zu tun, ohne viele Dummy-Variablen zu erstellen? Diese Variablen sind fast alle Zeichenfolgen und keine Zahlen.

Dan
quelle
2
Ich bin gespannt, wie es am besten geht.
theforestecologist

Antworten:

26

glmnet kann den Faktor nicht direkt annehmen. Sie müssen Faktorvariablen in Dummies umwandeln. Mit model.matrix ist dies nur ein einfacher Schritt, zum Beispiel:

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 wird ein LASSO bauen.

Romain
quelle
1
+1 Tolle Antwort! Darf ich fragen, warum Sie oder jemand, warum man intercept = FALSE verwendet?
Erosennin
Dies scheint zu scheitern, wenn es zwei kategoriale Variablen gibt: Ich erhalte zu Recht L1-Spalten, wenn var1 L1-Ebenen hat, aber L2-1-Spalten für var2 (das L2-Ebenen hat).
Peter Straka
@Peter Straka: Summe (über L1-Dummies für var1) = 1 für alle Datensätze und Summe (über L2-Dummies für V2) = 1 für alle Datensätze, sodass die L1-Dummies für var1 und die L2-Dummies für var2 linear abhängig sind. Mindestens einer der Dummies L2-Dummies für var2 ist redundant (zum Erstellen eines linearen Modells).
VictorZurkowski