Перехресне підтвердження регресії ласо в R


10

Функція R cv.glm (бібліотека: завантаження) обчислює оцінену помилку передбачення перехресної перевірки K-кратного для узагальнених лінійних моделей і повертає дельту. Чи є сенс використовувати цю функцію для регресії ласо (бібліотека: glmnet), і якщо так, то як це можна виконати? Бібліотека glmnet використовує перехресну перевірку, щоб отримати найкращий параметр повороту, але я не знайшов жодного прикладу, який би перехресно перевіряв остаточне рівняння glmnet.


2
Це, безумовно, має сенс, і хоча LASSO оптимізує лише один (гіпер-) параметр, якщо ви хочете отримати найкращу оцінку, ви можете виконати вибірковий показник, який не є зразком, вам потрібен зовнішній цикл перехресної перевірки. Див. Чи можна переоцінювати, навчаючи алгоритми машинного навчання за допомогою CV / Bootstrap? & цитовані папери.
Scortchi

Рекомендується використовувати glmnet, а не glm esp. якщо ви робите резюме. Якщо я пригадую, пакет glm стає болючим у використанні. Також cv.glmnet виставляє більше параметрів, ніж cv.glm.
smci

Відповіді:


9

Приклад того , як зробити ванільний простий крос-перевірки для ласо в glmnetна mtcars наборі даних.

  1. Завантажити набір даних.

  2. Підготуйте функції (незалежні змінні). Вони повинні бути matrixкласними. Найпростіший спосіб перетворення, dfщо містить категоричні змінні, matrixє через model.matrix. Майте на увазі, за замовчуванням glmnetпідходить перехоплення, тож вам краще знімати перехоплення з матриці моделі.

  3. Підготуйте відповідь (залежна змінна). Давайте зарахуємо автомобілі з вище середнього mpgнастільки ж ефективними ('1'), а решта - неефективними ('0'). Перетворити цю змінну у фактор.

  4. Запустити перехресну перевірку через cv.glmnet. Він буде вибирати alpha=1з glmnetпараметрів за замовчуванням , про що ви просили: регресія ласо.

  5. Вивчаючи результати перехресної перевірки, ви можете зацікавити щонайменше 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)))


Гарна відповідь. .. також варто запустити резюме кілька разів і відмітити криву помилок (див.? cv.glmnet) для врахування вибірки.
user20650

@SergeyBushmanov ДУЖЕ КОРИСНО!
theforestecologist

Привіт, я знаю, що це старий пост, але я хотів задати вам питання. Ви згадуєте, що результат моделі нічого не говорить про статистичну значущість коефіцієнтів, тож як визначити, чи є вони значущими чи ні?
Джун Чан

@JunJang "Немає статистичної значущості для коефіцієнтів" - це твердження авторів пакета, а не я. Це твердження подано, я не пам’ятаю точно, ні в одній із книг авторів пакету, ні в віньєтці пакету. У такому випадку, замість того, щоб говорити про коефіцієнти значущими чи ні, ви краще скажете, що вони "корисні" чи не пояснюють ціль шляхом перехресної перевірки.
Сергій Бушманов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.