Чи може логістична регресія glmnet безпосередньо обробляти факторні (категоричні) змінні, не потребуючи фіктивних змінних? [зачинено]


15

Я будую логістичну регресію в R за допомогою методу LASSO з функціями cv.glmnetвибору lambdaі glmnetдля кінцевої моделі.

Я вже знаю всі недоліки щодо автоматичного вибору моделі, але мені це потрібно зробити в будь-якому випадку.

Моя проблема полягає в тому, що мені потрібно включити факторні (категоричні) змінні в модель, чи є якийсь спосіб зробити це без створення безлічі фіктивних змінних? Ці змінні майже всі рядки, а не числа.


2
Мені цікаво найкращий спосіб зробити це також.
theforestecologist

Відповіді:


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 є зайвою (для побудови лінійної моделі).
VictorZurkowski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.