Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从多个confusionMatrix';s_R_Machine Learning_Confusion Matrix - Fatal编程技术网

从多个confusionMatrix';s

从多个confusionMatrix';s,r,machine-learning,confusion-matrix,R,Machine Learning,Confusion Matrix,对于各种不同的分类模型,我有许多confusionMatrix输出。我想从每个混淆矩阵中提取模型度量(即灵敏度-->平衡精度,或从cf_1$byClass中提取所有度量),以填充数据帧。我希望数据框架包含所有这些指标,以及它来自哪个混淆矩阵的标签。有人能帮我弄清楚怎么做吗?请参见以下可复制的示例: library(caret) library(tidyverse) df_1 <- data.frame(x = sample(LETTERS[1:2], 20, replace = T),

对于各种不同的分类模型,我有许多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
库(插入符号)
图书馆(tidyverse)
df_1关于:

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, mode = "sens_spec")
cf_2 <- confusionMatrix(df_2$y, df_2$x, mode = "sens_spec")

bind_rows(stack(cf_1$byClass), stack(cf_2$byClass), .id = "id") %>% 
  filter(ind %in% c("Sensitivity", "Specificity")) %>% 
  spread(id, values) %>% 
  rename(metric = ind, mod1 = "1", mod2 = "2")


#>        metric      mod1 mod2
#> 1 Sensitivity 0.4285714  0.5
#> 2 Specificity 0.6153846  0.4
那么:

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, mode = "sens_spec")
cf_2 <- confusionMatrix(df_2$y, df_2$x, mode = "sens_spec")

bind_rows(stack(cf_1$byClass), stack(cf_2$byClass), .id = "id") %>% 
  filter(ind %in% c("Sensitivity", "Specificity")) %>% 
  spread(id, values) %>% 
  rename(metric = ind, mod1 = "1", mod2 = "2")


#>        metric      mod1 mod2
#> 1 Sensitivity 0.4285714  0.5
#> 2 Specificity 0.6153846  0.4
两种方法(顺便说一句,我认为您的示例中有一种类型,
df_1
使用了两次)

#基本R
输出两种方法(顺便说一句,我认为您的示例中有一种类型,
df_1
使用了两次)

#基本R

输出感谢@c1au610_HH,这个解决方案是可行的,但我理想情况下希望尽可能少地硬编码(即,不使用敏感性、特异性……第12项指标)。我认为astrofunkswag的答案是最简单的方法,因为它只涉及混淆矩阵名称中的硬编码,而不涉及其他任何内容@c1au610_HH,这个解决方案是可行的,但我理想情况下希望尽可能少地硬编码(即不使用敏感度、特异性……第12项指标)。我认为astrofunkswag的答案是最简单的方法,因为它只涉及混淆矩阵名称中的硬编码,其他任何方法都不管用。非常感谢并感谢df_1上的旗帜,我们已经开始更新了!这很有效。非常感谢并感谢df_1上的旗帜,我们已经开始更新了!
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, mode = "sens_spec")
cf_2 <- confusionMatrix(df_2$y, df_2$x, mode = "sens_spec")

bind_rows(stack(cf_1$byClass), stack(cf_2$byClass), .id = "id") %>% 
  filter(ind %in% c("Sensitivity", "Specificity")) %>% 
  spread(id, values) %>% 
  rename(metric = ind, mod1 = "1", mod2 = "2")


#>        metric      mod1 mod2
#> 1 Sensitivity 0.4285714  0.5
#> 2 Specificity 0.6153846  0.4
data.frame(stack(cf_1$byClass))
# Base R
output <- data.frame(rbind(cf_1$byClass, cf_2$byClass))
output$model = c('cf_1', 'cf_2')

# dplyr version
output <- bind_rows(cf_1$byClass, cf_2$byClass, .id = 'model')