楼主: 楚韵荆风
20781 29

[问答] Lasso在R的LARS包中的一个问题 [推广有奖]

11
ltx5151 发表于 2012-10-9 09:49:28
不太明白楼主想干嘛,可以说的具体点吗。如果你只是想做lasso,直接调节lambda即可。另一个求解lasso
的函数,可以用glmnet。 里面是用coordinate descent求解的,速度比lars更快。但是Lars提供了更好的insight。 对于9楼坛友,岭回归是做l2 regularization,

12
楚韵荆风 学生认证  发表于 2012-10-9 12:57:23
ltx5151 发表于 2012-10-9 09:49
不太明白楼主想干嘛,可以说的具体点吗。如果你只是想做lasso,直接调节lambda即可。另一个求解lasso
的函 ...
非常感谢你的回复。我最近也发现了这个glmnet包可以做,确实是用coordinate descent的算法求解,但是我有一个疑问,想请教一下你,输出的系数估计中含有intercept term,这个截距项该怎么解释,因为我的模型中是不含有截距项的? 如果我只用输出的系数的估计,舍去截距项的估计,是否合理?
其实,我问题的本质是想解这个L1惩罚的最小二乘问题,看了很多文章,都说用LARS算法求解,我就不知道怎么用LARS算法来解这个问题,如果用glmnet命令就变成了coordinate descent算法了,与文章说的就不一样了,自然也没法验证别人的结果。我知道LARS包中中lars()命令可以求解lasso,但是,不知道怎样设置lambda的值?
另外,我注意到lasso2包里面的 l1ce()命令可以解系数为L1约束的最优化问题,但是也不知道怎样与lambda对应起来?
不知道版主有知不知道如何解决?

下面是用glmnet命令写的一段程序
# generate Data
G.DAT=function(n, sigma, rho, b)
{
   p=length(b)
   xx=matrix(rnorm(n*p), ncol=p)
   corrmat=array(0,dim=c(p,p))
   for(i in 1:p){
      for(j in 1:p){
         corrmat[i,j]=rho^abs(i-j)
      }
   }
   cholmat=chol(corrmat)
   X=xx%*%cholmat
   epsilon=rnorm(n)*sigma
   Y=X%*%b+epsilon
   data.frame(X=X, Y=Y)
}

dat=G.DAT(n=60, sigma=1, rho=0.5, b=c(3, 1.5, 0, 0, 2, 0, 0, 0))
X=as.matrix(dat[,1:8])
Y=as.vector(dat[,9])

glm0=glmnet(X,Y,family="gaussian", alpha=1)
coef(glm0)
共享是一种彼此的快乐

13
ltx5151 发表于 2012-10-9 19:55:42
OK。

对于你的第一个问题,十分正确,现在在glmnet总还是会自动加入Intercept。这个暂时没办法,因为一些实现上的问题,glmnet中并没有将函数写成generic function的形式。如果lz想用glmnet的方法,要么根据Hastie他们的论文自己实现,要么就改一下package的里面的运算(需要Fortran)

对于使用Lars的问题,你只要指定type="lasso" (这个是默认值).lambda是一个tuning parameter,可以根据你自己的需要选取。lambda越大,variable selection的结果会约sparse。一般在建模的时候,lambda是根据经验,或者特定方法(比如cross validation)选取的,这取决于你建模的目的是什么。

14
楚韵荆风 学生认证  发表于 2012-10-10 11:43:24
ltx5151 发表于 2012-10-9 19:55
OK。

对于你的第一个问题,十分正确,现在在glmnet总还是会自动加入Intercept。这个暂时没办法,因为一些 ...
感谢你的回复。
使用lars函数,type指定lasso,但是调节参数lambda在哪里指定?这个函数里面arguments没有lambda指定这个选项啊
共享是一种彼此的快乐

15
ltx5151 发表于 2012-10-10 17:51:51
楚韵荆风 发表于 2012-10-10 11:43
感谢你的回复。
使用lars函数,type指定lasso,但是调节参数lambda在哪里指定?这个函数里面arguments没 ...
Lars产生的是entire path。是从0到最大的lambda的结果。最大的lambda是指使所有的变量系数都为0的最小lambda.

16
楚韵荆风 学生认证  发表于 2012-10-10 18:38:38
ltx5151 发表于 2012-10-10 17:51
Lars产生的是entire path。是从0到最大的lambda的结果。最大的lambda是指使所有的变量系数都为0的最小lam ...
谢谢你,原来object$lambda就可以看到了
共享是一种彼此的快乐

17
方方侯 发表于 2013-4-12 19:50:32
object$lambda 产生的是一个序列 ,从大到小排列 ,选其中最小的一个作为s值吗?

18
楚韵荆风 学生认证  发表于 2013-4-13 09:17:24
方方侯 发表于 2013-4-12 19:50
object$lambda 产生的是一个序列 ,从大到小排列 ,选其中最小的一个作为s值吗?
不是,选Cp准则对应最小的s或者其它准则,比如BIC\AIC\RIC等
共享是一种彼此的快乐

19
ntsean 发表于 2013-4-14 06:03:42
用 cross validation 来选择 lambda

参考 Element of statistical learning

20
huxiutao 发表于 2013-12-23 15:55:28
可不可以给我发一下R的LARS包,我keyi 看看怎么回事,huxiutao@126.com

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 01:21