Пример того , как сделать ванильный простой кросс-проверки для лассо в glmnet
на mtcars
наборе данных.
Загрузите набор данных.
Подготовить функции (независимые переменные). Они должны быть matrix
классными. Самый простой способ преобразовать df
содержащие категориальные переменные в matrix
это через model.matrix
. Имейте в виду, по умолчанию glmnet
подходит перехват, так что вам лучше убрать перехват из матрицы модели.
Подготовьте ответ (зависимая переменная). Давайте закодируем автомобили с выше среднего mpg
как эффективные ('1'), а остальные как неэффективные ('0'). Преобразуйте эту переменную в фактор.
Запустите перекрестную проверку через cv.glmnet
. Он получит параметры по alpha=1
умолчанию glmnet
, о чем вы просили: регрессия лассо.
Изучив результаты перекрестной проверки, вы можете быть заинтересованы по крайней мере в двух частях информации:
лямбда, что минимизирует перекрестную проверку ошибок. glmnet
фактически обеспечивает 2 лямбды: lambda.min
и lambda.1se
. Это ваше суждение как практикующий статистик, который можно использовать.
результирующие регуляризованные коэффициенты.
Пожалуйста, смотрите код R согласно приведенным выше инструкциям:
# Load data set
data("mtcars")
# Prepare data set
x <- model.matrix(~.-1, data= mtcars[,-1])
mpg <- ifelse( mtcars$mpg < mean(mtcars$mpg), 0, 1)
y <- factor(mpg, labels = c('notEfficient', 'efficient'))
library(glmnet)
# Run cross-validation
mod_cv <- cv.glmnet(x=x, y=y, family='binomial')
mod_cv$lambda.1se
[1] 0.108442
coef(mod_cv, mod_cv$lambda.1se)
1
(Intercept) 5.6971598
cyl -0.9822704
disp .
hp .
drat .
wt .
qsec .
vs .
am .
gear .
carb .
mod_cv$lambda.min
[1] 0.01537137
coef(mod_cv, mod_cv$lambda.min)
1
(Intercept) 6.04249733
cyl -0.95867199
disp .
hp -0.01962924
drat 0.83578090
wt .
qsec .
vs .
am 2.65798203
gear .
carb -0.67974620
Заключительные комментарии:
Обратите внимание, что вывод модели ничего не говорит о статистической значимости коэффициентов, только значения.
Штраф l1 (лассо), о котором вы просили, печально известен нестабильностью, о чем свидетельствует этот пост в блоге и этот вопрос по обмену стека . Лучшим способом может быть перекрестная проверка alpha
, которая позволит вам выбрать правильное сочетание штрафников l1 и l2.
альтернативным способом перекрестной проверки может быть обращение к карету train( ... method='glmnet')
и, наконец, лучший способ узнать больше о cv.glmnet
его исходных настройках glmnet
- это, конечно ?glmnet
, консоль R)))