У R, чи відповідає "glmnet" перехоплення?


10

Мені підходить лінійна модель в R, використовуючи glmnet. Оригінальна (нерегульована) модель була пристосована з використанням lmі не мала постійного терміну (тобто вона була у формі lm(y~0+x1+x2,data)).

glmnetприймає матрицю предикторів та вектор відповідей. Я читав glmnetдокументацію і не можу знайти згадки про постійний термін.

Отже, чи є спосіб попросити glmnetпримусити лінійне прилягання через початок?

Відповіді:


12

Так, перехоплення включено в модель glmnet , але воно не регулюється (див. Шляхи регуляризації узагальнених лінійних моделей через координатний спуск , стор. 13). Більш детально про реалізацію, безумовно, можна отримати, уважно ознайомившись з кодом (для сімейства гауссів це elnet()функція, яку називають glmnet()), але вона знаходиться у Fortran.

Ви можете спробувати санкціонований пакет, який дозволяє видалити перехоплення, перейшовши unpenalized = ~0на penalized().

> x <- matrix(rnorm(100*20),100,20)
> y <- rnorm(100)
> fit1 <- penalized(y, penalized=x, unpenalized=~0, 
                    standardize=TRUE) 
> fit2 <- lm(y ~ 0+x)
> plot((coef(fit1) + coef(fit2))/2, coef(fit2)-coef(fit1))

Щоб отримати регуляризацію Лассо, ви можете спробувати щось на кшталт

> fit1b <- penalized(y, penalized=x, unpenalized=~0, 
                     standardize=TRUE, lambda1=1, steps=20)
> show(fit1b)
> plotpath(fit1b)

Як видно на наступному малюнку, між параметрами регресії, обчисленими обома методами (зліва), є невеликі відмінності, і ви можете легко побудувати рішення шляху Лассо (праворуч).

alt текст

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.