我不熟悉glmnet
中的R
包,并希望根据已发布的lambda
函数研究论文中的建议指定glmnet.cv
函数。文档表明我们可以提供递减的lambdas
序列作为参数。但是,在文档中没有如何执行此操作的示例。
如果有人可以建议如何去做,那将是非常感激的。我是否将100奇数值的向量(nlambda
的默认值)传递给函数?如果有的话,这个向量的最小值和最大值应该有什么限制?另外,在指定向量时,有关nvars
,nobs
等的注意事项吗?
提前致谢。
答案 0 :(得分:6)
您可以像这样定义网格:
grid=10^seq(10,-2,length=100) ##get lambda sequence
ridge_mod=glmnet(x,y,alpha=0,lambda=grid)
答案 1 :(得分:0)
这很容易,但在原始文档中没有很好地解释;)
以下我使用过cox系列,但您可以根据需要进行更改
my_cvglmnet_fit <- cv.glmnet(x=regression_data, y=glmnet_response, family="cox", maxit = 100000)
然后你可以绘制由cv.glmnet创建的拟合对象,并且在图中你可以很容易地看到lambda最小的位置。其中一条虚线垂直线是最小的lambda,另一条是1se。
plot(my_cvglmnet_fit)
以下几行可帮助您查看非零系数及其对应值:
coef(my_cvglmnet_fit, s = "lambda.min")[which(coef(my_cvglmnet_fit, s = "lambda.min") != 0)] # the non zero coefficients
colnames(regression_data)[which(coef(my_cvglmnet_fit, s = "lambda.min") != 0)] # The features that are selected
这里有一些可能有用的链接:
http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
http://blog.revolutionanalytics.com/2013/05/hastie-glmnet.html