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