Так, перехоплення включено в модель 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)
Як видно на наступному малюнку, між параметрами регресії, обчисленими обома методами (зліва), є невеликі відмінності, і ви можете легко побудувати рішення шляху Лассо (праворуч).