[英]extract contents from confusionMatrix saved in a list column in dplyr
如下面的代码所示,在交叉验证后,我试图为每个折叠提取模型指标。 我保存了重采样中的所有预测,按折叠对数据进行分组,计算每组的混淆矩阵,并将混淆矩阵对象保存为列表列cm
。 现在我需要从列中保存的对象中提取指标信息,如精度等。 我的示例代码如下所示。
library(caret)
iris2 = iris %>%
filter(Species != 'setosa') %>%
mutate(Species = factor(Species))
train.control <- trainControl(method="cv",
number=5,
summaryFunction = twoClassSummary,
classProbs = TRUE,
savePredictions='all')
rf = train(Species~., data=iris2, method = 'rf',
metric = 'ROC', trControl=train.control)
rf$pred %>% group_by(Resample) %>%
do(cm = confusionMatrix(.$pred, .$obs),
Accuracy = map(cm, ~.x$byClass['Precision']))
我收到错误消息:
Error in .x$byClass : $ operator is invalid for atomic vectors
我不明白为什么它不起作用。 我的问题是如何修改最后一行以使其工作? 谢谢
您可以使用ungroup()
,然后通过访问您使用unlist()
提取元素本身的每个折叠的list
的特定部分来简单地mutate
Accuracy
。
rf$pred %>%
group_by(Resample) %>%
do(cm = confusionMatrix(.$pred, .$obs)) %>%
ungroup() %>%
mutate(neg_pred_value = map(cm, ~ .x[["byClass"]][["Neg Pred Value"]]) %>% unlist(),
accuracy = map(cm, ~ .x[["byClass"]][["Precision"]]) %>% unlist())
使用上面的代码,我们得到以下输出作为tibble
# A tibble: 5 x 4
Resample cm neg_pred_value accuracy
<chr> <list> <dbl> <dbl>
1 Fold1 <S3: confusionMatrix> 0.9090909 1.0000000
2 Fold2 <S3: confusionMatrix> 1.0000000 1.0000000
3 Fold3 <S3: confusionMatrix> 1.0000000 1.0000000
4 Fold4 <S3: confusionMatrix> 0.8181818 0.8888889
5 Fold5 <S3: confusionMatrix> 1.0000000 0.9090909
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.