目录

1.自写函数

2.使用内置函数fourfoldplot

3.使用yardstick包中的conf_mat() 和autoplot() 函数

4.多类别confusion matrix


在评估分类器效果的时候,除了要呈现sensitivity,specificity,F1score等参数外,还需要图示confusion matrix的结果,以更直观地呈现结果。以以下示例文件为例

set.seed(123)
data <- data.frame(Actual = sample(c("True","False"), 100, replace = TRUE),Prediction = sample(c("True","False"), 100, replace = TRUE))
table(data$Prediction, data$Actual)

输出结果为

       False TrueFalse    23   31True     20   26

此为confusion matrix的表格,如何图示呢?以下提供几种图示方法:

1.自写函数

先用caret包中的confusionMatrix函数构建matrix

library(caret)
result_matrix<-confusionMatrix(data$Prediction,data$Actual)

输出结果为:

Confusion Matrix and StatisticsReference
Prediction False TrueFalse    23   31True     20   26Accuracy : 0.49           95% CI : (0.3886, 0.592)No Information Rate : 0.57           P-Value [Acc > NIR] : 0.9564         Kappa : -0.0087        Mcnemar's Test P-Value : 0.1614         Sensitivity : 0.5349         Specificity : 0.4561         Pos Pred Value : 0.4259         Neg Pred Value : 0.5652         Prevalence : 0.4300         Detection Rate : 0.2300         Detection Prevalence : 0.5400         Balanced Accuracy : 0.4955         'Positive' Class : False   

自写函数

draw_confusion_matrix <- function(cm) {layout(matrix(c(1,1,2)))par(mar=c(2,2,2,2))plot(c(100, 345), c(300, 450), type = "n", xlab="", ylab="", xaxt='n', yaxt='n')title('CONFUSION MATRIX', cex.main=2)# create the matrix rect(150, 430, 240, 370, col='#3F97D0')text(195, 435, 'Non-COVID-19', cex=1.2)rect(250, 430, 340, 370, col='#F7AD50')text(295, 435, 'COVID-19', cex=1.2)text(125, 370, 'Predicted', cex=1.3, srt=90, font=2)text(245, 450, 'Actual', cex=1.3, font=2)rect(150, 305, 240, 365, col='#F7AD50')rect(250, 305, 340, 365, col='#3F97D0')text(140, 400, 'Non-COVID-19', cex=1.2, srt=90)text(140, 335, 'COVID-19', cex=1.2, srt=90)# add in the cm results res <- as.numeric(cm$table)text(195, 400, res[1], cex=1.6, font=2, col='white')text(195, 335, res[2], cex=1.6, font=2, col='white')text(295, 400, res[3], cex=1.6, font=2, col='white')text(295, 335, res[4], cex=1.6, font=2, col='white')# add in the specifics plot(c(100, 0), c(100, 0), type = "n", xlab="", ylab="", main = "DETAILS", xaxt='n', yaxt='n')text(10, 85, names(cm$byClass[1]), cex=1.2, font=2)text(10, 70, round(as.numeric(cm$byClass[1]), 3), cex=1.2)text(30, 85, names(cm$byClass[2]), cex=1.2, font=2)text(30, 70, round(as.numeric(cm$byClass[2]), 3), cex=1.2)text(50, 85, names(cm$byClass[5]), cex=1.2, font=2)text(50, 70, round(as.numeric(cm$byClass[5]), 3), cex=1.2)text(70, 85, names(cm$byClass[6]), cex=1.2, font=2)text(70, 70, round(as.numeric(cm$byClass[6]), 3), cex=1.2)text(90, 85, names(cm$byClass[7]), cex=1.2, font=2)text(90, 70, round(as.numeric(cm$byClass[7]), 3), cex=1.2)# add in the accuracy information text(30, 35, names(cm$overall[1]), cex=1.5, font=2)text(30, 20, round(as.numeric(cm$overall[1]), 3), cex=1.4)text(70, 35, names(cm$overall[2]), cex=1.5, font=2)text(70, 20, round(as.numeric(cm$overall[2]), 3), cex=1.4)
}  

使用绘图函数

draw_confusion_matrix(result_matrix)

2.使用内置函数fourfoldplot

ctable <- table(data$Actual,data$Prediction)
fourfoldplot(ctable, color = c("#CC6666", "#99CC99"),conf.level = 0, margin = 1, main = "Confusion Matrix")

3.使用yardstick包中的conf_mat() 和autoplot() 函数

library(yardstick)
library(ggplot2)# The confusion matrix from a single assessment set (i.e. fold)
cm <- conf_mat(data, Actual, Prediction)autoplot(cm, type = "heatmap") +scale_fill_gradient(low="#D6EAF8",high = "#2E86C1")

4.多类别confusion matrix

#data
confusionMatrix(iris$Species, sample(iris$Species))
newPrior <- c(.05, .8, .15)
names(newPrior) <- levels(iris$Species)cm <-confusionMatrix(iris$Species, sample(iris$Species))
# extract the confusion matrix values as data.frame
cm_d <- as.data.frame(cm$table)
# confusion matrix statistics as data.frame
cm_st <-data.frame(cm$overall)
# round the values
cm_st$cm.overall <- round(cm_st$cm.overall,2)# here we also have the rounded percentage values
cm_p <- as.data.frame(prop.table(cm$table))
cm_d$Perc <- round(cm_p$Freq*100,2)
library(ggplot2)     # to plot
library(gridExtra)   # to put more
library(grid)        # plot together# plotting the matrix
cm_d_p <-  ggplot(data = cm_d, aes(x = Prediction , y =  Reference, fill = Freq))+geom_tile() +geom_text(aes(label = paste("",Freq,",",Perc,"%")), color = 'red', size = 8) +theme_light() +guides(fill=FALSE) # plotting the stats
cm_st_p <-  tableGrob(cm_st)# all together
grid.arrange(cm_d_p, cm_st_p,nrow = 1, ncol = 2, top=textGrob("Confusion Matrix and Statistics",gp=gpar(fontsize=25,font=1)))

Reference:

R how to visualize confusion matrix using the caret package - Stack Overflow

绘制confusion matrix的R实现相关推荐

  1. R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix)

    R语言使用caret包的confusionMatrix函数计算混淆矩阵.使用编写的自定义函数可视化混淆矩阵(confusion matrix) 目录

  2. R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix)、R语言多分类混淆矩阵可视化

    R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix).R语言多分类混淆矩阵可视化 目录

  3. R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标

    R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy.Precision.Recall(sensitivity).F1.Specificity指标 ...

  4. R计算混淆矩阵(Confusion Matrix)

    R计算混淆矩阵(Confusion Matrix) 目录 R计算混淆矩阵(Confusion Matrix) 拟合Logistic回归模型 创建混淆矩阵

  5. matlab 分类学习工具箱 Classification Learner的使用及导出其生成的图,混淆矩阵confusion matrix的画法

    声明:转自https://blog.csdn.net/qq_27914913/article/details/71436838 https://blog.csdn.net/evil_xue/artic ...

  6. WEKA “Detailed Accuracy By Class”和“Confusion Matrix”含义

    原文 === Summary ===(总结) Correctly Classified Instances(正确分类的实例)          45               90      % I ...

  7. 算法模型评价详解:confusion matrix Accuracy Precision Recall F1 调和平均 加权F1 Micro-F1 Macro-F1 PRC ROC AUC

    目录 问题定义 confusion matrix Accuracy Precision和Recall和PRC F1和调和平均 加权F1 Micro-F1和Macro-F1 ROC和AUC PRC对比R ...

  8. MFC实现ENVI分类影像混淆矩阵(Confusion Matrix)及精度计算(Overall Accuracy和Kappa Coefficient)

    混淆矩阵(Confusion Matrix) 混淆矩阵计算代码: // 打开两幅待比较的分类影像 CFile datClassifyImg(ImgPath1, CFile::modeRead | CF ...

  9. 模型评估指标(Confusion Matrix、ROC、AUC)

    文章目录 1.选择合适的模型评估指标的依据 2.混淆矩阵(Confusion Matrix) 2.1 模型整体效果:准确率 2.2 捕捉少数类:精确率(Precision).召回率(Recall)和F ...

  10. 分类模型之混淆矩阵(Confusion Matrix)

    目录 混淆矩阵简介 混淆矩阵及其参数 混淆矩阵的其他指标 混淆矩阵简介 混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法. 可以简单理解为:将一个分类模 ...

最新文章

  1. 在Linux上建立日志服务器的问题
  2. 全民Tv帝师称称通过EOS赚了几千万,可信度有多高
  3. ADSL拨号中出现的错误代码
  4. Citrix无法访问本地磁盘
  5. Educational Round 64 题解
  6. web系统四层结构中服务器端,基于.NET平台构建四层B/S结构的动态网站
  7. LaTeX 目录中显示“参考文献”条目
  8. Altium AD20删除机械层MECH
  9. java程序员必备基础知识
  10. 假如苹果构建了一个搜索引擎
  11. 苹果为 macOS 重大漏洞道歉;迅雷内讧股价暴跌;小米百度在一起 | 一周业界事
  12. Q121:PBRT-V3,光传播方程(The Light Transport Equation)(14.4章节)
  13. uni-app自制表格及其分页
  14. 并查集练习--hdu1232poj1611poj2524
  15. vue引用阿里云iconfont使用icon图标(elementUI图标太少)
  16. Ubuntu 设置 samba共享文件夹
  17. No query specified
  18. oracle数据投毒,Oracle Database Server 'TNS Listener'远程数据投毒漏洞
  19. Android青翼蝠王之ContentProvider
  20. 苦尽甘来 一个月学通JavaWeb(六 XML)

热门文章

  1. 电脑重装系统后如何把网站设为首页
  2. 入职Apifox研发组三个月,我领悟了30个高效开发方法
  3. 使用USBWriter等工具做U盘启动盘后容量变小的解决办法
  4. 计算机二级页眉页脚的知识,轻松解决计算机二级之页眉页脚不再是问题-页眉页脚的设置...
  5. recover 没有捕获异常_Go的异常处理defer, panic, recover以及错误处理
  6. 2013考研数学复习指南(理工类)-陈文灯
  7. Python提取Word文档中所有脚注文本
  8. JetpackCompose快速实现底部导航栏,BottomNavigation使用
  9. 西电人总结各it公司待遇
  10. 汉字转拼音,并返回第一个字母