我是 中的glmnet
包的新手R
,想lambda
根据已发表的研究论文中的建议指定一个glmnet.cv
函数。文档建议我们可以提供一个递减序列lambdas
作为参数。但是,在文档中没有关于如何执行此操作的示例。
如果有人能建议如何去做,将不胜感激。我是否将 100 个奇数值(的默认值nlambda
)的向量传递给函数?这个向量的最小值和最大值应该有什么限制(如果有的话)?另外,在指定向量时,是否要记住关于 等的事情nvars
?nobs
提前致谢。
我是 中的glmnet
包的新手R
,想lambda
根据已发表的研究论文中的建议指定一个glmnet.cv
函数。文档建议我们可以提供一个递减序列lambdas
作为参数。但是,在文档中没有关于如何执行此操作的示例。
如果有人能建议如何去做,将不胜感激。我是否将 100 个奇数值(的默认值nlambda
)的向量传递给函数?这个向量的最小值和最大值应该有什么限制(如果有的话)?另外,在指定向量时,是否要记住关于 等的事情nvars
?nobs
提前致谢。
您可以像这样定义网格:
grid=10^seq(10,-2,length=100) ##get lambda sequence
ridge_mod=glmnet(x,y,alpha=0,lambda=grid)
尽管在原始文档中没有很好地解释,但这相当容易;)
在下文中,我使用了 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