【问题标题】:Extract the best parameters from cva.glmnet object从 cva.glmnet 对象中提取最佳参数
【发布时间】:2019-07-15 04:25:57
【问题描述】:

我确信有一种优雅的方法可以在运行 cva.glmnet 后提取最佳 alpha 和 lambda,但不知何故我找不到它。

这是我目前正在使用的代码。

谢谢

library(data.table);library(glmnetUtils);library(useful)

# make some dummy data

data(iris)

x <- useful::build.x(data = iris,formula = Sepal.Length ~ .)
y <- iris$Sepal.Length

# run cv for alpha in c(0,0.5,1)

output.of.cva.glmnet <- cva.glmnet(x=x,y=y,alpha = c(0,0.5,1))

# extract the best parameters

number.of.alphas.tested <- length(output.of.cva.glmnet$alpha)

cv.glmnet.dt <- data.table()

for (i in 1:number.of.alphas.tested){
  glmnet.model <- output.of.cva.glmnet$modlist[[i]]
  min.mse <-  min(glmnet.model$cvm)
  min.lambda <- glmnet.model$lambda.min
  alpha.value <- output.of.cva.glmnet$alpha[i]
  new.cv.glmnet.dt <- data.table(alpha=alpha.value,min_mse=min.mse,min_lambda=min.lambda)
  cv.glmnet.dt <- rbind(cv.glmnet.dt,new.cv.glmnet.dt)
}

best.params <- cv.glmnet.dt[which.min(cv.glmnet.dt$min_mse)]

【问题讨论】:

    标签: r cross-validation glmnet


    【解决方案1】:

    基于我在 GitHub 上阅读的一个帖子,作者希望人们使用 plot(fit) 而不是仅仅输出最佳参数。但是,这并不总是可能的,尤其是在涉及交叉验证时。这些辅助函数可能是一个很好的解决方法。

    # Train model.
    fit <- cva.glmnet(X, y)
    
    # Get alpha.
    get_alpha <- function(fit) {
      alpha <- fit$alpha
      error <- sapply(fit$modlist, function(mod) {min(mod$cvm)})
      alpha[which.min(error)]
    }
    
    # Get all parameters.
    get_model_params <- function(fit) {
      alpha <- fit$alpha
      lambdaMin <- sapply(fit$modlist, `[[`, "lambda.min")
      lambdaSE <- sapply(fit$modlist, `[[`, "lambda.1se")
      error <- sapply(fit$modlist, function(mod) {min(mod$cvm)})
      best <- which.min(error)
      data.frame(alpha = alpha[best], lambdaMin = lambdaMin[best],
                 lambdaSE = lambdaSE[best], eror = error[best])
    }
    
    

    【讨论】:

    • 我试图用你的cva.glmnet 替换cv.glmnet,但是一个sapply 函数,但无法弄清楚,如果你能看到stackoverflow.com/q/65400187/12649684,任何提示我都会很感激.
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 2016-11-21
    • 2011-11-21
    • 2010-09-10
    • 2020-06-04
    • 2019-06-15
    • 2010-11-28
    • 2018-06-30
    相关资源
    最近更新 更多