【问题标题】:How can we specify a custom lambda sequence to glmnet我们如何为 glmnet 指定自定义 lambda 序列
【发布时间】:2015-02-11 21:23:03
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 这个问题可能更适合stats.stackexchange.com
  • 问题是关于如何在R 中正确编码一个过程,所以它似乎适合 SO。

标签: r parameters glmnet lasso-regression hyperparameters


【解决方案1】:

你可以像这样定义一个网格:

    grid=10^seq(10,-2,length=100) ##get lambda sequence
    ridge_mod=glmnet(x,y,alpha=0,lambda=grid)

【讨论】:

    【解决方案2】:

    这相当容易,尽管在原始文档中没有很好地解释;)

    以下我使用的是 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-19
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多