Вибір функцій та модель з glmnet за даними метилювання (p >> N)


29

Я хотів би використовувати GLM та Elastic Net для вибору відповідних функцій + побудувати лінійну регресійну модель (тобто як прогнозування, так і розуміння, тому краще було б залишитись із відносно малою кількістю параметрів). Вихід безперервний. Це генів на 50 випадків. Я читав про пакет, але не впевнений на 100% в наступних кроках:2000050glmnet

  1. Виконайте резюме, щоб вибрати лямбда:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) з урахуванням вхідних даних, ви вибрали б інше значення альфа?
    (Q2) чи потрібно ще щось робити, перш ніж будувати модель?

  2. Підходить для моделі:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) нічого кращого, ніж "коваріація"?
    (Q4) Якщо лямбда була обрана резюме, для чого потрібен цей крок nlambda=?
    (Q5) краще використовувати lambda.minабо lambda.1se?

  3. Отримайте коефіцієнти, щоб побачити, які параметри випали ("."):
    predict(model, type="coefficients")

    На сторінці довідок є багато predictметодів (наприклад, predict.fishnet, predict.glmnet, predict.lognetі т.д.). Але будь-який "звичайний" передбачення, як я бачив на прикладі.
    (Q6) Чи варто використовувати predictчи predict.glmnetчи інше?

Незважаючи на те, що я читав про методи регуляризації, я досить новий в R та в цих статистичних пакетах, тому важко бути впевненим, адаптую чи проблему до коду. Будь-які пропозиції будуть вітатися.

ОНОВЛЕННЯ
На основі "Як раніше зазначалося, об'єкт поїзду класу містить елемент finalModel, який називається , що є пристосованою моделлю зі значеннями параметрів настройки, вибраними шляхом перекомпонування. Цей об'єкт може використовуватися традиційним способом для генерування прогнозів для нових зразків, використовуючи це функція прогнозування моделі ".

Використання caretдля налаштування як альфа, так і лямбда:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

Чи fitMзамінює попередній крок 2? Якщо так, то як зараз вказати параметри glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se)?
І наступний predictкрок, чи можу я замінити modelйого fitM?

Якщо я це роблю

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

це має сенс взагалі чи я неправильно змішую обидва словникові пакети?

Відповіді:


42

Частина 1

В еластичній сітці використовуються два типи обмежень на параметри

  1. βj
  2. βj

α

αλλcv.glmnet

αλ

Частина 2

Q3

mn?glmnet

type.gaussian = "naive"

mn"naive"n

glmnet"naive"m>500

Q4

nlambdaα=0.5λλnlambda

Q5

lambda.minλλklambda.1seλlambda.minlambda.1seλk-кратне оцінювання CV похибки найкращої моделі.

Вибір за вами:

  1. Найкраща модель, яка може бути занадто складною злегка приталеною: lambda.min
  2. Найпростіша модель, яка має порівнянні помилки з найкращою моделлю з огляду на невизначеність: lambda.1se

Частина 3

Це простий варіант, і це те, що ви багато зіткнетесь з R. Ви використовуєте цю predict()функцію 99,9% часу. R організує використання правильної функції для об'єкта, поданого в якості першого аргументу.

Більш технічно predict- це загальна функція, яка має методи (версії функції) для об'єктів різних типів (технічно відомих як класи ). Об'єкт, створений компанією, glmnetмає певний клас (або класи) залежно від того, який тип моделі насправді підходить. glmnet (пакет) надає методи predictфункції для цих різних типів об'єктів. R знає про ці методи і вибере відповідний на основі класу поставленого об'єкта.


2
ВЕЛИКИЙ вражувач! Я читав зараз про каре. Не на 100% впевнений у зв’язку між пакетом caret і glmnet, тому я зробив оновлення свого запитання, щоб уточнити "злиття" цих пакетів або перехід від glmnet до caret.
PGreen

1
@PGreen: caretце пакувальний пакет R, який обертає функціональні інтерфейси від пакетів 100+ ML, щоб бути більш послідовним і додає CV, пошук сітки, модифікувати шалені параметри за замовчуванням тощо.
smci

Я просто хочу додати, що для альфа-настройки ви можете використовувати cva.glmnet(..)замість просто cv.glmnet(...)та одночасно налаштовувати альфа та лямбда. Потім ви можете бігти, minlossplot(cva.fit)щоб побачити, яка альфа дає найкращий результат. Це обидві частини glmnetUtils
Espen Riskedal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.