我们如何为glmnet指定自定义lambda序列

时间:2014-12-13 05:43:40

标签: r parameters glmnet lasso hyperparameters

我不熟悉glmnet中的R包,并希望根据已发布的lambda函数研究论文中的建议指定glmnet.cv函数。文档表明我们可以提供递减的lambdas序列作为参数。但是,在文档中没有如何执行此操作的示例。

如果有人可以建议如何去做,那将是非常感激的。我是否将100奇数值的向量(nlambda的默认值)传递给函数?如果有的话,这个向量的最小值和最大值应该有什么限制?另外,在指定向量时,有关nvarsnobs等的注意事项吗?

提前致谢。

2 个答案:

答案 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