绘制confusion matrix的R实现
目录
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实现相关推荐
- R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix)
R语言使用caret包的confusionMatrix函数计算混淆矩阵.使用编写的自定义函数可视化混淆矩阵(confusion matrix) 目录
- R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix)、R语言多分类混淆矩阵可视化
R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix).R语言多分类混淆矩阵可视化 目录
- R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy.Precision.Recall(sensitivity).F1.Specificity指标 ...
- R计算混淆矩阵(Confusion Matrix)
R计算混淆矩阵(Confusion Matrix) 目录 R计算混淆矩阵(Confusion Matrix) 拟合Logistic回归模型 创建混淆矩阵
- matlab 分类学习工具箱 Classification Learner的使用及导出其生成的图,混淆矩阵confusion matrix的画法
声明:转自https://blog.csdn.net/qq_27914913/article/details/71436838 https://blog.csdn.net/evil_xue/artic ...
- WEKA “Detailed Accuracy By Class”和“Confusion Matrix”含义
原文 === Summary ===(总结) Correctly Classified Instances(正确分类的实例) 45 90 % I ...
- 算法模型评价详解: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 ...
- MFC实现ENVI分类影像混淆矩阵(Confusion Matrix)及精度计算(Overall Accuracy和Kappa Coefficient)
混淆矩阵(Confusion Matrix) 混淆矩阵计算代码: // 打开两幅待比较的分类影像 CFile datClassifyImg(ImgPath1, CFile::modeRead | CF ...
- 模型评估指标(Confusion Matrix、ROC、AUC)
文章目录 1.选择合适的模型评估指标的依据 2.混淆矩阵(Confusion Matrix) 2.1 模型整体效果:准确率 2.2 捕捉少数类:精确率(Precision).召回率(Recall)和F ...
- 分类模型之混淆矩阵(Confusion Matrix)
目录 混淆矩阵简介 混淆矩阵及其参数 混淆矩阵的其他指标 混淆矩阵简介 混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法. 可以简单理解为:将一个分类模 ...
最新文章
- 在Linux上建立日志服务器的问题
- 全民Tv帝师称称通过EOS赚了几千万,可信度有多高
- ADSL拨号中出现的错误代码
- Citrix无法访问本地磁盘
- Educational Round 64 题解
- web系统四层结构中服务器端,基于.NET平台构建四层B/S结构的动态网站
- LaTeX 目录中显示“参考文献”条目
- Altium AD20删除机械层MECH
- java程序员必备基础知识
- 假如苹果构建了一个搜索引擎
- 苹果为 macOS 重大漏洞道歉;迅雷内讧股价暴跌;小米百度在一起 | 一周业界事
- Q121:PBRT-V3,光传播方程(The Light Transport Equation)(14.4章节)
- uni-app自制表格及其分页
- 并查集练习--hdu1232poj1611poj2524
- vue引用阿里云iconfont使用icon图标(elementUI图标太少)
- Ubuntu 设置 samba共享文件夹
- No query specified
- oracle数据投毒,Oracle Database Server 'TNS Listener'远程数据投毒漏洞
- Android青翼蝠王之ContentProvider
- 苦尽甘来 一个月学通JavaWeb(六 XML)
热门文章
- 电脑重装系统后如何把网站设为首页
- 入职Apifox研发组三个月,我领悟了30个高效开发方法
- 使用USBWriter等工具做U盘启动盘后容量变小的解决办法
- 计算机二级页眉页脚的知识,轻松解决计算机二级之页眉页脚不再是问题-页眉页脚的设置...
- recover 没有捕获异常_Go的异常处理defer, panic, recover以及错误处理
- 2013考研数学复习指南(理工类)-陈文灯
- Python提取Word文档中所有脚注文本
- JetpackCompose快速实现底部导航栏,BottomNavigation使用
- 西电人总结各it公司待遇
- 汉字转拼音,并返回第一个字母