如何识别最终插入符号弹性网模型中的非零系数 -

How to identify the non-zero coefficients in final caret elastic net model -

我已经使用 caret 使用 10 倍 cv 构建了一个弹性网络模型,我想看看最终模型中使用了哪些系数(即那些没有减少到零的系数)。我使用以下代码查看系数,但是,这似乎创建了一个数据帧,其中包含所用系数值的每个排列,而不是最终模型中使用的系数值:

tr_control = train_control(method="cv",number=10)
formula = response ~.

model1 = caret::train(formula,
                    data=training,
                    method="glmnet",
                    trControl=tr_control,
                    metric = "Accuracy",
                    family = "binomial")

然后从最终模型中提取系数并使用最佳 lambda 值,我使用了以下内容:

data.frame(as.matrix(coef(model1$finalModel, model1$bestTune$.lambda)))

然而,这只是 returns 所有系数的数据框,我可以看到系数已减少到零的不同实例,但是,我不确定哪个是最终模型使用。使用一些略有不同的代码,我得到略有不同的结果,但在这种情况下,没有系数减少到零,这对我来说表明最终模型没有将任何系数减少到零:

data.frame(as.matrix(coef(model1$finalModel, model1$bestTune$lambda))) #i have removed the full stop preceeding lambda

基本上,我想知道最终模型中有哪些特征,以评估模型作为特征缩减过程的表现(以及标准模型评估指标,如准确性、灵敏度等)。

由于您没有提供任何示例数据,我 post 基于 iris 内置数据集的示例,稍作修改以更好地满足您的需要(二项式结果)。

首先修改数据集

library(caret)
set.seed(5)#just for reproducibility
iris
irisn <- iris[iris$Species!="virginica",]
irisn$Species <- factor(irisn$Species,levels = c("versicolor","setosa"))
str(irisn)
summary(irisn)

拟合模型(为 train 设置控制参数的 caret 函数是 trainControl,而不是 train_control

tr_control = trainControl(method="cv",number=10)
model1  <-  caret::train(Species~.,
                      data=irisn,
                      method="glmnet",
                      trControl=tr_control,
                      family = "binomial")

您可以像之前那样提取最终模型的系数:

data.frame(as.matrix(coef(model1$finalModel, model1$bestTune$lambda)))

这里的模型也没有将任何系数减少到 0,但是如果我们添加一个对结果没有任何解释的随机变量呢?

irisn$new1 <- runif(nrow(irisn))
model2  <-  caret::train(Species~.,
                         data=irisn,
                         method="glmnet",
                         trControl=tr_control,
                         family = "binomial")
var <- data.frame(as.matrix(coef(model2$finalModel, model2$bestTune$lambda)))

在这里,如您所见,新变量的系数正在变为 0。您可以提取模型保留的变量名称:

rownames(var)[var$X1!=0]

最后,可以通过

获得测试集的准确度指标
confusionMatrix(predict(model1,test),test$outcome)