【问题标题】:Warning Message from cv.glmnet来自 cv.glmnet 的警告信息
【发布时间】:2021-02-12 17:07:20
【问题描述】:

我目前有类似下面的代码。

set.seed(1)
library(glmnet)
matrix_example <- matrix(runif(100000), ncol = 50)
grid <- 10 ^ seq(20, -2, length = 500)
x <- matrix_example[, -1]
y <- matrix_example[, 1] %>%
  scale(center = TRUE, scale = FALSE) %>%
  as.matrix()
fit_cv_glmnet <- cv.glmnet(x, y, lambda = grid, alpha = 1)
fit_glmnet <- glmnet(x, y, lambda = grid, alpha = 1)

但是,当我运行 cv.glmnet 时,我收到以下警告消息

Warning messages:
1: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
2: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
3: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
4: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
5: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
6: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
7: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
8: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
9: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values
10: In regularize.values(x, y, ties, missing(ties), na.rm = na.rm) :
  collapsing to unique 'x' values

当我运行glmnet 时,我根本没有收到此消息。我收到cv.glmnet 的警告有什么原因吗?它与函数计算交叉验证错误的方式有关吗?正如我所说,glmnet 函数工作正常,我能够识别出其模型对应于最小 BIC 的 lambda。

谢谢。

【问题讨论】:

    标签: r glmnet


    【解决方案1】:

    问题似乎是用户提供的 lambda 序列使算法出错。此序列为每个 lambda 生成相同的结果/错误(如 cv.glmnet 对象中的 cvm 向量所示)。

    如果您需要用户提供的序列,我建议您在调用函数时使用 nlambdalambda.min.ratio 参数指导算法创建它。如下所示,更改参数以适合您的目的。

    cv.glmnet(x, y, alpha = 1, nlambda = 500, lambda.min.ratio = 10^(-2))
    

    值得一提的是,警告消息本身与内部调用的stats::regularize.values 函数有关,该函数本身是从approx 函数调用的。这似乎是 lambda 序列问题的症状,而不是其本身的问题。

    【讨论】:

    • stats::regularize.values 警告是否不存在 glmnet 函数?奇怪的是,通过将lambda=10^seq(-2, 10, by = 0.02) 输入到lambda 调用cv.glmnet,我能够产生类似的结果。
    • 我们需要更彻底地阅读源代码,但我认为这与在cv.glmnet 中组合单独的glmnet 调用有关。是的,我认为这不会影响您的结果。无论此警告如何,它们都应该是有效的。
    猜你喜欢
    • 2022-08-10
    • 2019-10-31
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多