Answers:
是的,拦截器包含在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)
如下图所示,两种方法计算出的回归参数之间几乎没有差异(左),您可以非常容易地绘制套索路径解(右)。