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)