在R中,“ glmnet”是否适合截距?


10

我正在使用R在R中拟合线性模型glmnet。原始(非正规化)模型使用来拟合,lm并且没有常数项(即,形式为lm(y~0+x1+x2,data))。

glmnet采用预测变量矩阵和响应向量。我一直在阅读glmnet文档,找不到常量术语。

那么,有没有办法要求glmnet通过原点强制线性拟合呢?

Answers:


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)

如下图所示,两种方法计算出的回归参数之间几乎没有差异(左),您可以非常容易地绘制套索路径解(右)。

替代文字

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.