Tak, punkt przecięcia jest zawarty w modelu glmnet , ale nie jest on regularyzowany (por. Ścieżki normalizacji dla uogólnionych modeli liniowych poprzez zejście współrzędnych , s. 13). Więcej szczegółów na temat implementacji można z pewnością uzyskać, uważnie przyglądając się kodowi (dla rodziny gaussowskiej jest to elnet()
funkcja wywoływana przez glmnet()
), ale jest to w Fortranie.
Możesz spróbować ukaranego pakietu, który pozwala usunąć przechwycenie, przekazując unpenalized = ~0
do 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))
Aby uzyskać regularyzację Lasso, możesz spróbować czegoś takiego
> fit1b <- penalized(y, penalized=x, unpenalized=~0,
standardize=TRUE, lambda1=1, steps=20)
> show(fit1b)
> plotpath(fit1b)
Jak widać na następnym rysunku, między parametrami regresji obliczonymi obiema metodami (po lewej) są niewielkie różnice i bardzo łatwo można wykreślić rozwiązanie ścieżki Lasso (po prawej).