【问题标题】:Make cv.glmnet select something between lambda.min and lambda.1se让 cv.glmnet 在 lambda.min 和 lambda.1se 之间选择一些东西
【发布时间】:2020-09-29 23:26:24
【问题描述】:

我正在训练 Elastic Net 模型,发现 lambda.1se 远高于 lambda.min,通常是在选择零特征的情况下测试的最大 lambda。我猜这是因为我的标准偏差真的很大。

有没有办法让cv.glmnetlambda.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
)

【问题讨论】:

  • 您可以在fit$lambda 中使用一组lambda 值。如果lambda.1se 太稀疏,您可能需要根据fit$nzero 选择lambda。

标签: r r-caret glmnet


【解决方案1】:

感谢@Nutle,我能够根据您的建议实现类似于caret 中的tolerance 功能的选择功能。它在最小误差的百分比差内选择 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])
}

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2017-01-31
    • 2022-09-23
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多