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

时间:2019-09-06 19:12:42

标签: r cross-validation r-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)

1 个答案:

答案 0 :(得分: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向量。