如何从带有套索的线性模型中获取截距(lars R包)

luc*_*one 5 r lasso-regression intercept lars

我很难通过R包估算lars我的数据模型.

例如,我创建一个假数据集x和相应的值y,如下所示:

x = cbind(runif(100),rnorm(100))
colnames(x) = c("a","b")
y = 0.5 + 3 * x[,1,drop = FALSE]
Run Code Online (Sandbox Code Playgroud)

接下来,我使用lars函数训练一个使用套索正则化的模型:

m = lars(x,y,type = "lasso", normalize = FALSE, intercept = TRUE)
Run Code Online (Sandbox Code Playgroud)

现在我想知道估计的模型是什么(that I know to be: y = 0.5 + 3 * x[,1] + 0 * x[,2])

我只对最后一步获得的系数感兴趣:

cf = predict(m, x, s=1, mode = "fraction", type = "coef")$coef
cf
a b 
3 0
Run Code Online (Sandbox Code Playgroud)

这些是我期望的系数,但是我找不到从中获取intercept(0.5)的方法m.

我试图检查predict.lars适合的代码,如下所示:

fit = drop(scale(newx, 
           object$meanx, FALSE) %*% t(newbetas)) + object$mu)
Run Code Online (Sandbox Code Playgroud)

我可以看到变量是缩放的,并且y(对象$ mu)的平均值被使用,但我找不到一种简单的方法来获得我正在寻找的拦截值.我怎么能得到它?

小智 6

intercept=Tin lars具有使x变量和y变量居中的效果.它不包括带系数的显式截距项.

话虽这么说,predict(m,data.frame(a=0,b=0),s=2)$fit当协变量为0(传统拦截的定义)时,你可以做到y的预测值