我有多个不同分类模型的混淆矩阵输出。我希望从每个混淆矩阵中提取模型指标(例如,敏感性 –> 平衡准确率,或者来自cf_1$byClass的所有指标),并填充到一个数据框中。我希望数据框包含所有这些指标,以及表示这些指标来自哪个混淆矩阵的标签。谁能帮我弄清楚如何做到这一点?请看下面的可重现示例:
library(caret)library(tidyverse)df_1 <- data.frame(x = sample(LETTERS[1:2], 20, replace = T), y = sample(LETTERS[1:2], 20, replace = T))df_2 <- data.frame(x = sample(LETTERS[1:2], 20, replace = T), y = sample(LETTERS[1:2], 20, replace = T))cf_1 <- confusionMatrix(df_1$y, df_1$x)cf_2 <- confusionMatrix(df_2$y, df_2$x)# 我希望有一个数据框包含这些数据,以及一个表示相关混淆矩阵名称的列cf_1$byClasscf_2$byClass
我希望的输出看起来像这样,但包含所有相关指标:
x = c(0.2, 0.4)y = c(0.5, 0.6)z = c("cf_1", "cf_2" )output <- data.frame(Sensitivity = x, Specificity = y, Model = z)
更新
这是我想出的解决方案,虽然不漂亮,但它有效。尽管如此,我仍然欢迎看到是否有人能提出更简洁、更有效的方法来做这件事!
model_names <- c("cf_1", "cf_2")model_metrics <- list()for (i in 1:length(model_names)) { for (j in model_names) { model <- eval(as.name(j)) results <- model$byClass %>% round(digits = 3) results <- c(model = j, results) model_metrics[[j]] <- results }}model_metrics <- do.call(rbind, model_metrics) %>% data.frame %>% `rownames<-`(NULL)model_metrics
回答:
两种方法(顺便说一下,我认为您的示例中有一个打字错误,df_1
使用了两次)
# 基础Routput <- data.frame(rbind(cf_1$byClass, cf_2$byClass))output$model = c('cf_1', 'cf_2')# dplyr版本output <- bind_rows(cf_1$byClass, cf_2$byClass, .id = 'model')