如何在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)
答案 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向量。