【问题标题】:get coefficients of cross-validated glmnet model in caret在插入符号中获取交叉验证的 glmnet 模型的系数
【发布时间】:2020-01-09 15:37:30
【问题描述】:

如何在 R 的 caret 包中获得交叉验证的 glmnet 模型的系数?

library(caret)
x = matrix(rnorm(500), ncol=10)
y = rnorm(100)
control = trainControl(
         method="LOOCV",
         allowParallel = TRUE,
         number = nrow(sample_df), 
         verboseIter = FALSE,
         returnData = FALSE
        )

  my_elasticnet <- train(x, y,
                     method = "glmnet",
                     preProc = c("center", "scale"),
                     trControl = control)

【问题讨论】:

标签: r cross-validation r-caret


【解决方案1】:

我想你忘了显示 sample_df 的代码。但是,假设以下情况,您可以按如下方式访问它:

library(caret)
x = matrix(rnorm(500), ncol=10)
y = rnorm(100)
sample_df = cbind.data.frame(y,x)
control = trainControl(
  method="LOOCV",
  allowParallel = TRUE,
  number = nrow(sample_df), 
  verboseIter = FALSE,
  returnData = FALSE
)

my_elasticnet <- train(sample_df[2:11], sample_df$y,
                       method = "glmnet",
                       preProc = c("center", "scale"),
                       trControl = control)

my_elasticnet$finalModel$beta

如果您只看名称,您将获得有关最终模型所需的一切:

> names(my_elasticnet$finalModel)
 [1] "a0"          "beta"        "df"          "dim"         "lambda"      "dev.ratio"   "nulldev"    
 [8] "npasses"     "jerr"        "offset"      "call"        "nobs"        "lambdaOpt"   "xNames"     
[15] "problemType" "tuneValue"   "obsLevels"   "param"    

编辑:回应评论

最终模型取决于您选择的 alpha 和 lambda 级别。有 66 个这样的参数。如果你想选择一台机器认为最好的,你可以这样做:

coef(my_elasticnet$finalModel, my_elasticnet$bestTune$lambda)

这将为您提供您正在寻找的 11x1 矢量。

【讨论】:

  • my_elasticnet$finalModel$beta 给了我 10 x 62 稀疏矩阵的类“dgCMatrix”。我想要用于拟合最终模型的系数。
  • @FissehaBehane:看我的补充。
猜你喜欢
  • 2015-04-02
  • 2016-12-07
  • 2021-06-11
  • 2015-04-06
  • 2018-06-13
  • 2019-06-15
  • 2018-10-22
  • 2020-05-28
  • 2017-07-15
相关资源
最近更新 更多