我目前有类似于下面的代码。
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
向量所示)。
如果你需要一个用户提供的序列,我建议指导算法在调用函数时使用nlambda
和lambda.min.ratio
参数来创建它。如下所示,更改参数以适应您的目的。
cv.glmnet(x, y, alpha = 1, nlambda = 500, lambda.min.ratio = 10^(-2))
值得注意的是,警告消息本身与内部调用的stats::regularize.values
函数有关,该函数本身从approx
函数调用。这似乎是lambda序列问题的一个症状,而不是它本身的问题。