Приклад того , як зробити ванільний простий крос-перевірки для ласо в glmnetна mtcars
наборі даних.
Завантажити набір даних.
Підготуйте функції (незалежні змінні). Вони повинні бути matrixкласними. Найпростіший спосіб перетворення, dfщо містить категоричні змінні, matrixє через model.matrix. Майте на увазі, за замовчуванням glmnetпідходить перехоплення, тож вам краще знімати перехоплення з матриці моделі.
Підготуйте відповідь (залежна змінна). Давайте зарахуємо автомобілі з вище середнього mpgнастільки ж ефективними ('1'), а решта - неефективними ('0'). Перетворити цю змінну у фактор.
Запустити перехресну перевірку через cv.glmnet. Він буде вибирати alpha=1з glmnetпараметрів за замовчуванням , про що ви просили: регресія ласо.
Вивчаючи результати перехресної перевірки, ви можете зацікавити щонайменше 2 інформацією:
лямбда, що мінімізує перехресну перевірку помилок. 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 penalizer (ласо), який ви просили, сумно нестабільності, про що свідчить в цьому блозі , і цей stackexchange питання . Кращим способом може бути також перехресне підтвердження alpha, що дозволить вам прийняти рішення про правильну суміш пеналізаторів l1 та l2.
Альтернативним способом перехресної перевірки може стати звернення до каретки train( ... method='glmnet')
і, нарешті, найкращий спосіб дізнатися більше про cv.glmnetце, і звідки за замовчуванням glmnetце, звичайно, ?glmnetв консолі R)))