Пример того , как сделать ванильный простой кросс-проверки для лассо в 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)))