4

我是 中的glmnet包的新手R,想lambda根据已发表的研究论文中的建议指定一个glmnet.cv函数。文档建议我们可以提供一个递减序列lambdas作为参数。但是,在文档中没有关于如何执行此操作的示例。

如果有人能建议如何去做,将不胜感激。我是否将 100 个奇数值(的默认值nlambda)的向量传递给函数?这个向量的最小值和最大值应该有什么限制(如果有的话)?另外,在指定向量时,是否要记住关于 等的事情nvarsnobs

提前致谢。

4

2 回答 2

7

您可以像这样定义网格:

    grid=10^seq(10,-2,length=100) ##get lambda sequence
    ridge_mod=glmnet(x,y,alpha=0,lambda=grid)
于 2015-02-28T08:40:45.830 回答
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

于 2015-01-15T15:29:47.537 回答