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
)
4

1 回答 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])
}
于 2020-06-10T13:49:19.973 回答