r - 如何使用插入符号包在 R 中绘制混淆矩阵
问题描述
如何在 R 中绘制带有颜色的混淆矩阵?我有混淆矩阵统计信息,但我不知道如何将其绘制成可视化图。任何人请协助。谢谢。
# Training Naive Bayes model using {caret} package with 10 fold cross validation
NBclassifierCaretCV <- train(x=data[, -1], y=data$diagnosis, 'nb',
trControl=trainControl(method='cv', number=10))
CVtrainDataset <- predict(NBclassifierCaretCV, newdata=data[, -1])
# Confusion matrix and a summary / using caret package
confusionMatrix(data=CVtrainDataset, data$diagnosis)
解决方案
假设您的混淆矩阵如下:
pred <- factor(sample(1:5, 100, replace = T))
ref<- factor(sample(1:5, 100, replace = T))
library(caret)
cm <- confusionMatrix(pred, ref)
然后,您会想要检索/创建一些信息,例如:
library(ggplot2)
library(grid)
library(gridExtra)
library(likert)
cm <- confusionMatrix(pred,ref) #create a confusion matrix
cm_d <- as.data.frame(cm$table) # extract the confusion matrix values as data.frame
cm_st <-data.frame(cm$overall) # confusion matrix statistics as data.frame
cm_st$cm.overall <- round(cm_st$cm.overall,2) # round the values
cm_d$diag <- cm_d$Prediction == cm_d$Reference # Get the Diagonal
cm_d$ndiag <- cm_d$Prediction != cm_d$Reference # Off Diagonal
cm_d[cm_d == 0] <- NA # Replace 0 with NA for white tiles
cm_d$Reference <- reverse.levels(cm_d$Reference) # diagonal starts at top left
cm_d$ref_freq <- cm_d$Freq * ifelse(is.na(cm_d$diag),-1,1)
绘制矩阵
plt1 <- ggplot(data = cm_d, aes(x = Prediction , y = Reference, fill = Freq))+
scale_x_discrete(position = "top") +
geom_tile( data = cm_d,aes(fill = ref_freq)) +
scale_fill_gradient2(guide = FALSE ,low="red3",high="orchid4", midpoint = 0,na.value = 'white') +
geom_text(aes(label = Freq), color = 'black', size = 3)+
theme_bw() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
legend.position = "none",
panel.border = element_blank(),
plot.background = element_blank(),
axis.line = element_blank(),
)
绘制统计数据
plt2 <- tableGrob(cm_st)
全部一起
grid.arrange(plt1, plt2, nrow = 1, ncol = 2,
top=textGrob("Confusion Matrix",gp=gpar(fontsize=25,font=1)))
这不是最漂亮的情节,但您可以稍后更改图形组件。
推荐阅读
- emacs - 有没有办法根据子标题 todo-keywords 计算 org-mode 标题属性?
- windows - 从 powershell 输出中删除文本
- node.js - 使用 NodeJS Bull Queue 独立处理器
- javascript - 用文本替换损坏的图像
- javascript - 如何在 Blazor 客户端中正确获取 facebook 登录令牌?
- html - 如何根据时间戳和电子表格上的文本在图表上添加文本标签
- python - 将 Pandas 索引设置为给定的 DateTimeindex
- .net - 使用 VBA 从 Access 应用程序中使用 ASP.NET Web 服务
- kotlin - 仅在满足条件时才覆盖函数
- typescript - 电子,打字稿 - 函数中的其余参数不起作用