将 confusionMatrix 的输出保存为 .csv table
Saving output of confusionMatrix as a .csv table
我有以下代码生成了类似 table 的输出
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)
我想将输出的以下部分导出为 .csv
table
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
尝试将其写为 .csv
table 导致错误消息:
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
由于显而易见的原因,手动完成整个工作是不切实际的,而且容易出现人为错误。
关于如何将其导出为 .csv
的任何建议?
好的,所以如果你检查 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"
从这里开始,您 select 您想要从中创建 csv 的适当对象,并制作一个 data.frame 每个变量都有一列的对象。在您的情况下,这将是:
tocsv <- data.frame(cbind(t(cm$overall),t(cm$byClass)))
# You can then use
write.csv(tocsv,file="file.csv")
使用插入符号包
results <- confusionMatrix(pred, truth)
as.table(results)
给出
Reference
Prediction X1 X0
X1 36 29
X0 218 727
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
和
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
使用这些和 write.csv 命令你可以获得整个 confusionMatrix 信息
绝对最简单的解决方案是使用 readr::write_rds
简单地写出。您可以导出和导入所有内容,同时保持 confusionMatrix
结构完整。
如果 A
是一个 caret::confusionMatrix
对象,那么:
broom::tidy(A) %>% writexl::write_xlsx("mymatrix.xlsx")
可选择将 writexl
替换为 write.csv()
。
将 table 也包含在单独的 sheet 中:
broom::tidy(A) %>% list(as.data.frame(A$table)) %>% writexl::write_xlsx("mymatrix.xlsx")
我发现 capture.output 最适合我。
它只是将您的输出复制为 .csv 文件
(你也可以做成.txt)
capture.output(
confusionMatrix(xtab, prevalence = 0.25),
file = "F:/Home Office/result.csv")
我有以下代码生成了类似 table 的输出
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)
我想将输出的以下部分导出为 .csv
table
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
尝试将其写为 .csv
table 导致错误消息:
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
由于显而易见的原因,手动完成整个工作是不切实际的,而且容易出现人为错误。
关于如何将其导出为 .csv
的任何建议?
好的,所以如果你检查 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"
从这里开始,您 select 您想要从中创建 csv 的适当对象,并制作一个 data.frame 每个变量都有一列的对象。在您的情况下,这将是:
tocsv <- data.frame(cbind(t(cm$overall),t(cm$byClass)))
# You can then use
write.csv(tocsv,file="file.csv")
使用插入符号包
results <- confusionMatrix(pred, truth)
as.table(results)
给出
Reference
Prediction X1 X0
X1 36 29
X0 218 727
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
和
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
使用这些和 write.csv 命令你可以获得整个 confusionMatrix 信息
绝对最简单的解决方案是使用 readr::write_rds
简单地写出。您可以导出和导入所有内容,同时保持 confusionMatrix
结构完整。
如果 A
是一个 caret::confusionMatrix
对象,那么:
broom::tidy(A) %>% writexl::write_xlsx("mymatrix.xlsx")
可选择将 writexl
替换为 write.csv()
。
将 table 也包含在单独的 sheet 中:
broom::tidy(A) %>% list(as.data.frame(A$table)) %>% writexl::write_xlsx("mymatrix.xlsx")
我发现 capture.output 最适合我。
它只是将您的输出复制为 .csv 文件
(你也可以做成.txt)
capture.output(
confusionMatrix(xtab, prevalence = 0.25),
file = "F:/Home Office/result.csv")