来自 cv.glmnet 的警告信息

Warning Message from cv.glmnet

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

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。

谢谢。

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

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

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

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