将混淆矩阵的输出保存为 .csv 表

Opo*_*sum 6 csv r export-to-csv confusion-matrix

我有以下代码导致类似表格的输出

 lvs <- c("normal", "abnormal")
 truth <- factor(rep(lvs, times = c(86, 258)),
                 levels = rev(lvs))
 pred <- factor(
                c(
                  rep(lvs, times = c(54, 32)),
                  rep(lvs, times = c(27, 231))),               
                levels = rev(lvs))

 xtab <- table(pred, truth)

 library(caret)
 confusionMatrix(xtab)

 confusionMatrix(pred, truth)
 confusionMatrix(xtab, prevalence = 0.25)   
Run Code Online (Sandbox Code Playgroud)

我想将输出的以下部分导出为.csv表格

               Accuracy : 0.8285          
                 95% CI : (0.7844, 0.8668)
    No Information Rate : 0.75            
    P-Value [Acc > NIR] : 0.0003097       

                  Kappa : 0.5336          
 Mcnemar's Test P-Value : 0.6025370       

            Sensitivity : 0.8953          
            Specificity : 0.6279          
         Pos Pred Value : 0.8783          
         Neg Pred Value : 0.6667          
             Prevalence : 0.7500          
         Detection Rate : 0.6715          
   Detection Prevalence : 0.7645          
      Balanced Accuracy : 0.7616  
Run Code Online (Sandbox Code Playgroud)

尝试将其写为.csv表会导致错误消息:

write.csv(confusionMatrix(xtab),file="file.csv")
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : 
cannot coerce class ""confusionMatrix"" to a data.frame
Run Code Online (Sandbox Code Playgroud)

出于显而易见的原因,手动完成整个工作是不切实际的,并且容易出现人为错误。

关于如何将其导出为 的任何建议.csv

小智 7

使用插入符号包

results <- confusionMatrix(pred, truth)
Run Code Online (Sandbox Code Playgroud)

as.table(results)

         Reference
Prediction  X1  X0
        X1  36  29
        X0 218 727
Run Code Online (Sandbox Code Playgroud)

as.matrix(results,what="overall")

Accuracy       7.554455e-01
Kappa          1.372895e-01
AccuracyLower  7.277208e-01
AccuracyUpper  7.816725e-01
AccuracyNull   7.485149e-01
AccuracyPValue 3.203599e-01
McnemarPValue  5.608817e-33
Run Code Online (Sandbox Code Playgroud)

as.matrix(results, what = "classes")

Sensitivity          0.8953488
Specificity          0.6279070
Pos Pred Value       0.8783270
Neg Pred Value       0.6666667
Precision            0.8783270
Recall               0.8953488
F1                   0.8867562
Prevalence           0.7500000
Detection Rate       0.6715116
Detection Prevalence 0.7645349
Balanced Accuracy    0.7616279
Run Code Online (Sandbox Code Playgroud)

使用这些和 write.csv 命令,您可以获得整个混淆矩阵信息


mto*_*oto 5

好的,所以如果您检查 的输出confusionMatrix(xtab, prevalence = 0.25),它是一个列表:

cm <- confusionMatrix(pred, truth)
str(cm)

    List of 5
 $ positive: chr "abnormal"
 $ table   : 'table' int [1:2, 1:2] 231 27 32 54
  ..- attr(*, "dimnames")=List of 2
  .. ..$ Prediction: chr [1:2] "abnormal" "normal"
  .. ..$ Reference : chr [1:2] "abnormal" "normal"
 $ overall : Named num [1:7] 0.828 0.534 0.784 0.867 0.75 ...
  ..- attr(*, "names")= chr [1:7] "Accuracy" "Kappa" "AccuracyLower" "AccuracyUpper" ...
 $ byClass : Named num [1:8] 0.895 0.628 0.878 0.667 0.75 ...
  ..- attr(*, "names")= chr [1:8] "Sensitivity" "Specificity" "Pos Pred Value" "Neg Pred Value" ...
 $ dots    : list()
 - attr(*, "class")= chr "confusionMatrix"
Run Code Online (Sandbox Code Playgroud)

从这里开始,您选择要从中创建 csv 的适当对象,并制作一个 data.frame,其中每个变量都有一列。在您的情况下,这将是:

tocsv <- data.frame(cbind(t(cm$overall),t(cm$byClass)))

# You can then use
write.csv(tocsv,file="file.csv")
Run Code Online (Sandbox Code Playgroud)