论文图片绘制 Python绘制duofenlei 混淆矩阵及可视化(颜色随正确率渐变)

需求

  • 论文中对多分类评价需要
  • 混淆矩阵已获得,需要可视化

给出数据

混淆矩阵的定义以及如何读图不再描述,这里仅给出绘制方法

给出数据:8分类任务

 [451, 1,  12,  6,  1,   3,   5,  2],[18, 451, 25,  19, 24,  14,  7,  2],[41, 27,  487, 2,  15,  2,   24, 3],[14, 20,  4,   395, 7,   16,  15, 5],[1,  8,   30,  25, 421, 16,  14, 14],[13, 18,  1,   15, 13,  455, 18, 19],[19, 7,   12,  17, 4,   21,  352,15],[15, 23,  31,  15, 3,   9,   15, 458]

实验代码

  • 给出所需的包
    numpy和matplotlib
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
  • 定义分类标签
classes = ['1', '2', '3', '4', '5', '6', '7', '8']

这里可以修改为自己所需的标签以及分类任务,如二分类只需要两个标签,若标签为“花、草、鱼……”自行进行修改即可

  • 将混淆矩阵数据放到矩阵中,如
confusion_matrix = np.array([[451, 1,  12,  6,  1,   3,   5,  2],[18, 451, 25,  19, 24,  14,  7,  2],[41, 27,  487, 2,  15,  2,   24, 3],[14, 20,  4,   395, 7,   16,  15, 5],[1,  8,   30,  25, 421, 16,  14, 14],[13, 18,  1,   15, 13,  455, 18, 19],[19, 7,   12,  17, 4,   21,  352,15],[15, 23,  31,  15, 3,   9,   15, 458]], dtype=np.int)  # 输入特征矩阵
  • 矩阵初始化
proportion = []
length = len(confusion_matrix)
print(length)
for i in confusion_matrix:for j in i:temp = j / (np.sum(i))proportion.append(temp)
# print(np.sum(confusion_matrix[0]))
# print(proportion)
pshow = []
for i in proportion:pt = "%.2f%%" % (i * 100)pshow.append(pt)
proportion = np.array(proportion).reshape(length, length)  # reshape(列的长度,行的长度)
pshow = np.array(pshow).reshape(length, length)
  • 设置混淆矩阵图片样式
# print(pshow)
config = {"font.family": 'Times New Roman',  # 设置字体类型
}
rcParams.update(config)
plt.imshow(proportion, interpolation='nearest', cmap=plt.cm.Blues)  # 按照像素显示出矩阵
# (改变颜色:'Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds','YlOrBr', 'YlOrRd',
# 'OrRd', 'PuRd', 'RdPu', 'BuPu','GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn')
# plt.title('confusion_matrix')
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, fontsize=12)
plt.yticks(tick_marks, classes, fontsize=12)
  • 计算准确率数值及颜色渐变设置
iters = np.reshape([[[i, j] for j in range(length)] for i in range(length)], (confusion_matrix.size, 2))
for i, j in iters:if (i == j):plt.text(j, i - 0.12, format(confusion_matrix[i, j]), va='center', ha='center', fontsize=10, color='white',weight=5)  # 显示对应的数字plt.text(j, i + 0.12, pshow[i, j], va='center', ha='center', fontsize=10, color='white')else:plt.text(j, i - 0.12, format(confusion_matrix[i, j]), va='center', ha='center', fontsize=10)  # 显示对应的数字plt.text(j, i + 0.12, pshow[i, j], va='center', ha='center', fontsize=10)plt.ylabel('True label', fontsize=16)
plt.xlabel('Predict label', fontsize=16)
plt.tight_layout()
plt.show()
# plt.savefig('混淆矩阵.png')

展示

需要n分类如何修改?

  • 以二分类为例,只需要修改两个地方
  • classes = ['1', '2']
  • confusion_matrix = np.array( [ [96, 4], [2, 98] ], dtype=np.int) # 输入特征矩阵

大功告成

完整代码

# confusion_matrix
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParamsclasses = ['1', '2', '3', '4', '5', '6', '7', '8']
confusion_matrix = np.array([[451, 1,  12,  6,  1,   3,   5,  2],[18, 451, 25,  19, 24,  14,  7,  2],[41, 27,  487, 2,  15,  2,   24, 3],[14, 20,  4,   395, 7,   16,  15, 5],[1,  8,   30,  25, 421, 16,  14, 14],[13, 18,  1,   15, 13,  455, 18, 19],[19, 7,   12,  17, 4,   21,  352,15],[15, 23,  31,  15, 3,   9,   15, 458]], dtype=np.int)  # 输入特征矩阵
proportion = []
length = len(confusion_matrix)
print(length)
for i in confusion_matrix:for j in i:temp = j / (np.sum(i))proportion.append(temp)
# print(np.sum(confusion_matrix[0]))
# print(proportion)
pshow = []
for i in proportion:pt = "%.2f%%" % (i * 100)pshow.append(pt)
proportion = np.array(proportion).reshape(length, length)  # reshape(列的长度,行的长度)
pshow = np.array(pshow).reshape(length, length)
# print(pshow)
config = {"font.family": 'Times New Roman',  # 设置字体类型
}
rcParams.update(config)
plt.imshow(proportion, interpolation='nearest', cmap=plt.cm.Blues)  # 按照像素显示出矩阵
# (改变颜色:'Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds','YlOrBr', 'YlOrRd',
# 'OrRd', 'PuRd', 'RdPu', 'BuPu','GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn')
# plt.title('confusion_matrix')
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, fontsize=12)
plt.yticks(tick_marks, classes, fontsize=12)thresh = confusion_matrix.max() / 2.
# iters = [[i,j] for i in range(len(classes)) for j in range((classes))]iters = np.reshape([[[i, j] for j in range(length)] for i in range(length)], (confusion_matrix.size, 2))
for i, j in iters:if (i == j):plt.text(j, i - 0.12, format(confusion_matrix[i, j]), va='center', ha='center', fontsize=10, color='white',weight=5)  # 显示对应的数字plt.text(j, i + 0.12, pshow[i, j], va='center', ha='center', fontsize=10, color='white')else:plt.text(j, i - 0.12, format(confusion_matrix[i, j]), va='center', ha='center', fontsize=10)  # 显示对应的数字plt.text(j, i + 0.12, pshow[i, j], va='center', ha='center', fontsize=10)plt.ylabel('True label', fontsize=16)
plt.xlabel('Predict label', fontsize=16)
plt.tight_layout()
plt.show()
# plt.savefig('混淆矩阵.png')

论文图片绘制 Python绘制多分类混淆矩阵及可视化(颜色随正确率渐变)相关推荐

  1. python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...

    深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码),矩阵,样本,模型,类别,真实 深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码) 深度学习自学记录(3) ...

  2. matplotlib绘制混淆矩阵_混淆矩阵及其可视化

    混淆矩阵(Confusion Matrix)是机器学习中用来总结分类模型预测结果的一个分析表,是模式识别领域中的一种常用的表达形式.它以矩阵的形式描绘样本数据的真实属性和分类预测结果类型之间的关系,是 ...

  3. python matplotlib绘图、混淆矩阵 汉字字体、数字、英文字母的设置

    最近在写一篇文章的时候,文章对图片格式有要求:图中汉字用宋体六号.数字和英文字母用新罗马字体,这些都需要在一张图中表现出来.经过一番查找摸索,现归纳整理如下: 对坐标轴设置 现假设有如下要求:在一张图 ...

  4. 数据分享|PYTHON用决策树分类预测糖尿病和可视化实例

    全文下载链接:http://tecdat.cn/?p=23848 在本文中,决策树是对例子进行分类的一种简单表示.它是一种有监督的机器学习技术,数据根据某个参数被连续分割.决策树分析可以帮助解决分类和 ...

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

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

  6. scikit-learn 多分类混淆矩阵

    注:有些markdown语法没渲染出来,可以简书查看:scikit-learn 多分类混淆矩阵 前面 sklearn.metrics.multilabel_confusion_matrix 是 sci ...

  7. R语言使用lightgbm包构建多分类的LightGBM模型、caret包的confusionMatrix函数输出多分类混淆矩阵(包含:准确率及其置信区、p值、Kappa、特异度、灵敏度等)

    R语言使用lightgbm包构建多分类的LightGBM模型.caret包的confusionMatrix函数输出多分类混淆矩阵(包含:准确率及其置信区.p值.Kappa.特异度.灵敏度等) 目录

  8. Python使用pandas_ml输出混淆矩阵以及从混淆矩阵衍生出来的其他指标:TP、TN、FP、FN、TPR、TNR(SPC)、PPV、NPV、FPR、FDR、FNR、ACC、F1、MCC等

    Python使用pandas_ml输出混淆矩阵以及从混淆矩阵衍生出来的其他指标:TP.TN.FP.FN.TPR.TNR(SPC).PPV.NPV.FPR.FDR.FNR.ACC.F1.MCC等 目录 ...

  9. sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights)、计算融合模型的混淆矩阵、可视化混淆矩阵

    sklearn使用投票器VotingClassifier算法构建多模型融合的软投票器分类器(soft voting)并自定义子分类器的权重(weights).计算融合模型的混淆矩阵.可视化混淆矩阵 目 ...

最新文章

  1. 46 万奖金等你拿 | 微众银行第二届金融科技高校技术大赛报名中
  2. 抓小偷编程题目c语言,如何使用面相对象编程和c++实现:警察抓小偷的任务
  3. unity检测范围内敌人_Unity实现视野范围外死亡敌人的分数显示在屏幕内
  4. 让批处理文件(.bat)程序无窗口(隐藏/静默)运行
  5. C#使用Json.NET解析Json
  6. [斯坦福]距离编码-更为强大的GNN
  7. python selenium 下拉列表_Selenium+Python之下拉菜单的定位
  8. 可视化程序设计基础(team)——采访上届大佬
  9. JUnit学习摘要+入门实例
  10. Linux鼠标回报率修改,鼠标回报率怎么调? 设置鼠标回报率的三种方法
  11. 安装SQL Server 2012时报.net framework 3.5错误
  12. dropout层加在哪里_神经网络Dropout层中为什么dropout后还需要进行rescale?
  13. 《游戏制作人手册》读书笔记
  14. 如何将bmp转化为jpg,bmp转jpg方法
  15. 长期吃nmn有副作用吗,nmn产品副作用,真相说明
  16. Cisco PacketTracer5---三层交换机连接路由器配置
  17. 对比市面淘宝短视频工具/软件,分析淘宝短视频未来趋势
  18. 【MFC】打砖块小游戏(下)(7)
  19. 多线程--何时用到多线程
  20. 红外通信的应用——PPM调制与解码(C51)

热门文章

  1. 关于TypeError: e[h] is not a function的问题
  2. 2022年第十七届研电赛报名|安谋科技(Arm China)命题:基于特定开发平台的理性智能体设计
  3. 揭秘Facebook北极圈数据中心 日处理45亿赞
  4. npx create-nuxt-app myapp2 安装报错
  5. 标品与非标品的定义 标品与非标品的区别,以及标品与非标品直通车运营方案
  6. 计算机中guest用户是灰的,来宾帐户状态不适用呈灰色状
  7. 2年200店!Tims咖啡强势扩张的底气在哪里?
  8. Hark的数据结构与算法练习之若领图排序ProxymapSort
  9. cada0图纸框_CAD的图框应该怎么画-百度经验
  10. 软件测试周刊(第01期):古德哈特定律