r语言 - 来自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产生相同的结果/错误(如cv.glmnet对象中的cvm向量所示)。

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

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

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

最新更新