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