Як зробити перехресну перевірку cv.glmnet (регресія LASSO в R)?


10

Мені цікаво, як правильно підійти до навчання та тестування моделі LASSO, використовуючи glmnet в R?

  • Зокрема, мені цікаво, як це зробити, якщо відсутність зовнішнього набору даних тесту потребує використання я перехресної перевірки (або іншого подібного підходу) для тестування моєї моделі LASSO.

Дозвольте мені розбити свій сценарій:

У мене є лише один набір даних для інформування та навчання моєї моделі glmnet. Як результат, мені доведеться використовувати перехресну перевірку, щоб розділити свої дані, щоб також створити спосіб перевірити свою модель.

Я вже використовую cv.glmnet, що відповідно до деталей пакета :

Чи здійснює k-кратну перехресну перевірку для glmnet, виробляє графік та повертає значення для лямбда.

  • Чи виконується перехресна перевірка cv.glmnetпросто для того, щоб вибрати найкращу лямбда, чи це також є більш загальною процедурою перехресної перевірки?

    • Іншими словами, чи все-таки мені потрібно зробити ще один крос перевірки, щоб "перевірити" свою модель?

Я працюю з припущенням, що "так я це роблю".

Як це справа, як я підходжу до крос-верифікації вашої cv.glmnetмоделі?

  • Чи потрібно це робити вручну, чи, можливо, ця caretфункція корисна для моделей glmnet?

  • Чи використовую я дві концентричні "петлі" перехресної перевірки? ... Чи використовую "внутрішню петлю" CV через, cv.glmnetщоб визначити найкраще значення лямбда в кожній з k складок "зовнішньої петлі" k-кратної перехресної перевірки ?

    • Якщо я роблю перехресну перевірку своєї вже перехресної валідаційної cv.glmnetмоделі, як я ізолюю "найкращу" модель (від "найкращого" лямбда-значення) від кожної cv.glmnetмоделі в межах кожної складки мого "зовнішнього циклу" перехресної перевірки?

      • Примітка. Я визначаю "найкращу" модель як модель, пов'язану з лямбда, яка виробляє MSE в межах 1 SE мінімуму ... це $lambda.1seв cv.glmnetмоделі.

Контекст:

Я намагаюся передбачити вік дерева ("вік") на основі діаметра дерева ("D"), D ^ 2 та видів ("фактор (SPEC)"). [отримане рівняння: Age ~ D + factor(SPEC) + D^2]. У мене є ~ 50 К рядків даних, але дані є поздовжніми (відстежують особин через час) і складаються з ~ 65 видів.


1
Для тих, хто проголосував за закриття, не коментуючи: це не корисно ... дайте мені знати, яке ваше питання в коментарях, і я спробую це виправити.
theforestecologist

1
Вони не голосують, щоб закрити, вони голосують, щоб перенести його на CrossValided. Я просто додав свій голос за це.
Hack-R

@ theforestecologist: Ви повинні мати змогу побачити причини, пов'язані із закриттям / міграцією, натиснувши кнопку «Закрити».
DWin

Дякую за запитання, у мене було саме це питання. І я не можу використовувати карету, оскільки у мене багатофакторний Y. Але ви перевірили вихідний код і підтвердили, що додаткове резюме не потрібно? Вихідний код може бути досить важким для дотримання.
qoheleth

Відповіді:


3

Чи є перехресне підтвердження, яке виконується в cv.glmnet, просто для вибору найкращої лямбда, чи воно також є більш загальною процедурою перехресної перевірки?

Він робить майже все необхідне для перехресної перевірки. Наприклад, вона встановлює можливі lambdaзначення на дані, вибирає найкращу модель і, нарешті, тренує модель із відповідними параметрами.

Наприклад, у поверненому об’єкті:

cvm- середня перехресна перевірка помилки. cvsd- розрахункове стандартне відхилення.

Як і інші повернені значення, вони розраховуються на тестовому наборі. Нарешті,

glmnet.fit дає модель, що навчається за всіма даними (навчання + тест) з найкращими параметрами.

Чи потрібно це робити вручну, або, можливо, функція caret корисна для моделей glmnet?

Не потрібно цього робити вручну. "Caret" був би дуже корисним, і це один з моїх улюблених пакетів, оскільки він працює для всіх інших моделей з тим же синтаксисом. Я сам часто використовую caret, ніж cv.glmnet. Однак у вашому сценарії це по суті те саме.

Чи використовую дві концентричні "петлі" перехресної перевірки? ... Чи потрібно використовувати "внутрішню петлю" CV через cv.glmnet, щоб визначити найкраще значення лямбда в межах кожного з k складок "зовнішньої петлі" k-кратного перехресна обробка валідації?

Ви можете зробити це, і ця концепція дуже схожа на ідею вкладеної перехресної перевірки вкладеної крос-валідації для вибору моделі .

Якщо я роблю перехресну перевірку своєї вже перехресної валідації моделі cv.glmnet, як я ізолюю "найкращу" модель (від "найкращого" лямбда-значення) від кожної моделі cv.glmnet в межах кожної складки мого зовнішнього циклу " "перехресної перевірки?

Просто запустіть цикл, де ви генеруєте дані тренувань і тестові дані, виконуючись cv.glmnetна даних тренувань, і використовуйте модель glmnet.fitдля передбачення тестових даних.


@discupulus: Дякую. Чи можете ви надати якісь докази для цього? (тобто, пройди мене, будь ласка). Також, враховуючи вашу відповідь, чи означає це, що не потрібно подальших процесів перехресної перевірки, щоб повідомити про показник ефективності даних? (Я міг би просто повідомити про MSE випадку лямбда-1се як про остаточну результативність моделі?)
theforestecologist

Так, подальша перехресна перевірка не потрібна. Для доказів ви можете подивитися на вихідний код cv.glmnetфункції, як Rце відкритий код . Просто введіть cv.glmnetконсоль.
дисципліна

3
@discipulus. Я надіслав електронною поштою Тревор Хасті з запитанням: "чи cv.glmnet (реалізація R) робить CV лише для вибору лямбда? Чи це також зовнішнє резюме для підтвердження обраної лямбда? Іншими словами, чи потрібно кодувати власне зовнішнє резюме, якщо хочете перевірити вибрану лямбда? " і він відповів (досить швидко) "Так, просто вибрати лямбда", що я трактую, це означає, що це лише внутрішній резюме, і нам доведеться зашифрувати власне зовнішнє резюме.
qoheleth

@theforestecologist Я намагаюся дізнатися більше про перехресну перевірку та знайти вашу посаду навчальною. Я не розумію, що ви маєте на увазі під cv.glmnet, що також є більш загальною процедурою перехресної перевірки. Я подумав, що єдиним параметром, доступним для вибору, є лямбда - який зовнішній шар перехресної перевірки існує? Буду вдячний, якщо ви зможете відповісти. Дякую!
user2450223
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.