Может ли логистическая регрессия 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)]

Альфа = 1 будет строить LASSO.

Ромен
источник
1
+1 Отличный ответ! Могу ли я спросить, почему вы или кто-то другой, почему используется перехват = ЛОЖЬ?
Еросеннин
Кажется, что это не работает, когда есть две категориальные переменные: я правильно получаю столбцы L1, если var1 имеет уровни L1, но столбцы L2-1 для var2 (который имеет уровни L2).
Питер Страка
@Peter Straka: sum (для манекенов L1 для var1) = 1 для всех записей и sum (для манекенов L2 для V2) = 1 для всех записей, поэтому манекены L1 для var1 и манекены L2 для var2 линейно зависят. По крайней мере один из манекенов L2 манекена для var2 является избыточным (для построения линейной модели).
ВикторЗурковский,