在插入符号中获取交叉验证的 glmnet 模型的系数

get coefficients of cross-validated glmnet model in caret

如何在 R 的插入符包中获取交叉验证的 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)

我想你忘了显示 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 级别 select。这样的参数有66个。如果你想选择机器认为最好的那个,你可以这样做:

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

这只会给你一个你正在寻找的 11x1 矢量。