R 最终插入弹性网络模型中非零系数的识别-

R 最终插入弹性网络模型中非零系数的识别-,r,r-caret,glmnet,R,R Caret,Glmnet,我已经使用插入符号构建了一个使用10倍cv的弹性网络模型,我想看看在最终模型中使用了哪些系数(即那些没有减少到零的系数)。我使用了以下代码来查看系数,但是,这是为了创建所用系数值的每个排列的数据帧,而不是在最终模型中使用的数据帧: tr_control = train_control(method="cv",number=10) formula = response ~. model1 = caret::train(formula,

我已经使用插入符号构建了一个使用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)))
然而,这只是返回所有系数的数据帧,我可以看到系数被减少到零的不同实例,但是,我不确定最终模型使用的是哪一个。使用一些稍有不同的代码,我得到了稍有不同的结果,但在本例中,没有一个系数减少到零,这向我表明最终模型没有将任何系数减少到零:

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

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

由于您没有提供任何示例数据,我基于
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)
您可以像以前一样提取最终模型的系数:

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)))
最后,可以使用

confusionMatrix(predict(model1,test),test$outcome)

多亏了这一点——看来我的最终模型实际上并没有将任何系数减为零,这表明它并没有惩罚任何变量。我非常感谢您的帮助。您可以尝试使用
套索
模型,该模型仅适用于L1惩罚。就所选预测因素而言,它应该更具选择性,因为它是一个α=1的弹性网络回归。是的,我比较了glm、弹性网络、岭回归和套索。我在插入符号包之外做了这两件事,也使用了插入符号。
rownames(var)[var$X1!=0]
confusionMatrix(predict(model1,test),test$outcome)