Да, перехват включен в модель glmnet , но он не регуляризован (см. Пути регуляризации для обобщенных линейных моделей с помощью координатного спуска , стр. 13). Более подробную информацию о реализации, безусловно, можно получить, внимательно взглянув на код (для семейства гауссов это вызывается elnet()
функцией glmnet()
), но он написан на Фортране.
Вы можете попробовать штрафной пакет, который позволяет удалить перехват, перейдя 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)
Как видно из следующего рисунка, между регрессионными параметрами, вычисляемыми обоими методами (слева), есть небольшие различия, и вы можете очень легко построить решение пути Лассо (справа).