Czy regresja logistyczna glmnet może bezpośrednio obsługiwać zmienne czynnikowe (kategoryczne) bez potrzeby zmiennych zastępczych? [Zamknięte]

15

Buduję regresję logistyczną w R za pomocą metody LASSO z funkcjami cv.glmnetwyboru lambdai glmnetdla ostatecznego modelu.

Znam już wszystkie wady związane z automatycznym wyborem modelu, ale i tak muszę to zrobić.

Mój problem polega na tym, że muszę uwzględnić zmienne czynnikowe (modelowe) w modelu. Czy można to zrobić bez tworzenia wielu zmiennych zastępczych? Te zmienne to prawie wszystkie ciągi, a nie liczby.

Dan
źródło
2
Jestem również ciekawy, jak to zrobić.
theforestecologist

Odpowiedzi:

26

glmnet nie może brać czynnika bezpośrednio, musisz przekształcić zmienne czynnikowe w manekiny. To tylko jeden prosty krok przy użyciu model.matrix, na przykład:

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)]

alfa = 1 zbuduje LASSO.

Romain
źródło
1
+1 Świetna odpowiedź! Czy mogę zapytać, dlaczego ty lub ktoś, dlaczego ktoś używa opcji przechwytywania = FAŁSZ?
Erosennin
Wydaje się, że zawiedzie, gdy istnieją dwie zmienne jakościowe: słusznie otrzymuję kolumny L1, jeśli var1 ma poziomy L1, ale kolumny L2-1 dla var2 (który ma poziomy L2).
Peter Straka
@Peter Straka: suma (ponad manekiny L1 dla var1) = 1 dla wszystkich rekordów i suma (ponad manekiny L2 dla V2) = 1 dla wszystkich rekordów, więc manekiny L1 dla var1 i manekiny L2 dla var2 są liniowo zależne. Co najmniej jeden z manekinów L2 dla var2 jest redundantny (w celu zbudowania modelu liniowego).
VictorZurkowski