让cv.glmnet在lambda.min和lambda.1se之间选择一些东西。

问题描述 投票:0回答:1

我正在训练一个Elastic Net模型,并发现以下几点 lambda.1se 远高于 lambda.min,往往是选择零特征的最大lambda测试。我猜测这是因为我的标准差真的很大。

有什么方法可以使 cv.glmnet 选择一个介于 lambda.1selambda.min?

x = matrix(rnorm(100 * 20), 100, 20) # not the actual data
y = gl(2, 50)

fit <- cv.glmnet(
  x = x, y = y,
  family = "binomial",
  nfolds = nrow(x), grouped = F,
  standardize = T,
  alpha = 0.2
)
r caret glmnet
1个回答
3
投票

谢谢@Nutle,我能够利用你的建议实现一个类似于的选择函数。tolerance 作用于 caret. 它选择最小误差百分之一差内的最大lambda值。

get_lambda <- function(fit, tol = 1.05) {
  error <- fit$cvm[fit$lambda == fit$lambda.min]
  tolerance <- error * tol
  max(fit$lambda[fit$cvm <= tolerance])
}
© www.soinside.com 2019 - 2024. All rights reserved.