У меня есть несколько выходов confusionMatrix для различных моделей классификации. Я хотел бы извлечь метрики модели из каждой матрицы путаницы (т. Е. Чувствительности -> сбалансированной точности, или всех метрик из 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)
# I would like a dataframe with each of these, as well as column for the associated confusion matrix name
cf_1$byClass
cf_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