绘制混淆矩阵热力图

Python绘制混淆矩阵热力图


用matplotlib绘制混淆矩阵,可以通过改变 imshow 函数中的 cmap 参数来修改颜色。cmap 参数接受一个 colormap 的名字,你可以选择许多不同的 colormap,例如 ‘viridis’, ‘plasma’, ‘inferno’, ‘magma’, ‘cividis’, ‘cool’, ‘hot’ 等等。具体的 colormap 可以参考 matplotlib 的文档。

# 案例1:import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap, Normalizeconf_arr = [[33, 2, 0, 0, 0, 0, 0, 0, 0, 1, 3],[3, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 4, 41, 0, 0, 0, 0, 0, 0, 0, 1],[0, 1, 0, 30, 0, 6, 0, 0, 0, 0, 1],[0, 0, 0, 0, 38, 10, 0, 0, 0, 0, 0],[0, 0, 0, 3, 1, 39, 0, 0, 0, 0, 4],[0, 2, 2, 0, 4, 1, 31, 0, 0, 0, 2],[0, 1, 0, 0, 0, 0, 0, 36, 0, 2, 0],[0, 0, 0, 0, 0, 0, 1, 5, 37, 5, 1],[3, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38]]# 自定义渐变颜色
colors = ['#ffffff', '#ffcccc', '#ff6666', '#ff0000', '#990000']
custom_cmap = LinearSegmentedColormap.from_list('custom_cmap', colors)# 归一化对象,定义最小值和最大值
norm = Normalize(vmin=0, vmax=np.max(conf_arr))norm_conf = []
for i in conf_arr:a = 0tmp_arr = []a = sum(i, 0)for j in i:tmp_arr.append(float(j)/float(a))norm_conf.append(tmp_arr)fig = plt.figure()
plt.clf()
ax = fig.add_subplot(111)
ax.set_aspect(1)
res = ax.imshow(np.array(conf_arr), cmap=custom_cmap, norm=norm, interpolation='nearest')# 获取矩阵的宽度和高度
width, height = np.array(conf_arr).shape# 使用 range 替换 xrange
for x in range(width):for y in range(height):ax.annotate(str(conf_arr[x][y]), xy=(y, x),horizontalalignment='center',verticalalignment='center',color='black')cb = fig.colorbar(res)# 调整 alphabet 使其不会超出索引范围
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[:width]
plt.xticks(range(width), alphabet)
plt.yticks(range(height), alphabet)plt.savefig('confusion_matrix.png', format='png')
plt.show()

效果图如下:
在这里插入图片描述

# 案例2:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns# 创建混淆矩阵数据
intra_inter = np.array([[84.9, 4.7, 7.3, 0.5, 0.5, 1.6,0.1,0.2],[4.0, 89.6, 0.6, 4.0, 1.7, 0.1,0.3,0.1],[6.7, 0.5, 85.7, 1.4, 4.3, 1.0,0.2,0.4],[2.3, 0.0, 5.7, 87.4, 4.6, 0.0,0.3,0.1],[1.0, 1.0, 4.9, 1.0, 92.2, 0.0,0.0,0.3],[0.4, 0.4, 2.2, 0.4, 0.9, 95.1,0.2,0.4],[0.6, 0.6, 0.6, 2.2, 5.0, 0.1,96.1,0.3],[2.4, 0.6, 0.6, 7.7, 3.6, 4.5,0.2,95.1]
])intra_inter_obj = np.array([[89.1, 1.6, 7.8, 0.5, 0.5, 1.0,0.1,0.2],[1.7, 93.1, 1.2, 3.5, 0.6, 0.0,0.1,0.2],[6.7, 1.0, 91.4, 0.5, 0.5, 1.0,0.1,0.2],[1.1, 1.1, 4.6, 94.3, 4.6, 0.0,0.1,0.2],[1.0, 1.0, 6.9, 1.0, 90.2, 0.0,0.1,0.2],[0.4, 0.4, 0.4, 0.4, 0.4, 95.1,0.1,0.2],[7.7, 3.6, 3.6, 7.7, 2.7, 0.1,93.1,0.1],[2.4, 0.6, 0.6, 7.7, 3.6, 4.5,0.2,95.1]
])labels = ["Right set", "Right spike", "Right pass", "Right winpoint", "Left winpoint", "Left pass", "Left spike", "Left set"]# 每个矩阵的维度
n_labels = len(labels)
cell_size = 1.5  # 每个小块的大小# 创建图形
fig, ax = plt.subplots(1, 2, figsize=(n_labels * cell_size * 2, n_labels * cell_size))# 绘制第一个混淆矩阵
sns.heatmap(intra_inter, annot=True, fmt=".1f", cmap="Blues", ax=ax[0], xticklabels=labels, yticklabels=labels, cbar=False)
ax[0].set_title("Intra+Inter")
ax[0].set_xlabel('')
ax[0].set_ylabel('')# 绘制第二个混淆矩阵
sns.heatmap(intra_inter_obj, annot=True, fmt=".1f", cmap="Blues", ax=ax[1], xticklabels=labels, yticklabels=labels, cbar=True)
ax[1].set_title("Intra+Inter+Object")
ax[1].set_xlabel('')
ax[1].set_ylabel('')# 调整底部标签的倾斜角度
plt.setp(ax[0].get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor")
plt.setp(ax[1].get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor")# 获取颜色条对象
cbar = ax[1].collections[0].colorbar# 调整颜色条的位置和大小
cbar.ax.set_position([0.92, ax[1].get_position().y0, 0.02, ax[1].get_position().height])# 调整布局
plt.tight_layout(rect=[0, 0, 0.9, 1])
plt.show()

效果图如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1486523.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Rust代码答疑报错|Python一对一辅导答疑

Question 你好,我是悦创。 学员答疑: https://code.bornforthis.cn/?id4e72084d-1eaf-44ed-8067-744671491574https://code.bornforthis.cn/?id664ff169-41d6-409f-a05b-02ed42279759 问题代码: // You can bring module paths into sc…

阶梯-度小满春招算法方向第1批

问题的题面是典型的最长上升子序列问题。求方案数属动态规划问题&#xff0c;可推出以a[i]为最大节点的上升子序列方案数公式 dp[i]{dp[j] , 1<j<i-1&&f[j]1f[i]} &#xff08;f为最大上升子序列&#xff09;。 并且这个方案总数不会超过n&#xff0c;因此也…

C++相关概念和易错语法(24)(map、迭代器分类)

1.map 在上篇文章中&#xff0c;我着重介绍了set&#xff0c;由于map和set同源&#xff0c;所以这次我会着重介绍map别于set的地方 &#xff08;1&#xff09;模板参数 set是以单一的key作为成员变量&#xff0c;而map是以pair作为成员变量&#xff0c;而pair的first作为key来…

mysql对数据库的增删改

目录 DML语句&#xff1a; 增加数据&#xff08;insert语句&#xff09; 增加数据&#xff08;insert into select&#xff09; 修改数据&#xff08;update语句&#xff09; 【where 子句条件】 删除数据&#xff08;delete语句&#xff09; 删除数据&#xff08;trunca…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十一章 物理地址与虚拟地址

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

C# 委托函数 delegate

在C#中&#xff0c;委托&#xff08;Delegate&#xff09;是一种特殊的类型&#xff0c;它可以持有对方法的引用。 委托是实现事件的基础。事件本质上是多播委托&#xff0c;允许多个方法被触发 委托允许你将方法作为参数传递给其他方法&#xff0c;或者将方法作为返回值从方法…

基于生物地理算法的MLP多层感知机优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 生物地理算法&#xff08;BBO&#xff09;原理 4.2 多层感知机&#xff08;MLP&#xff09; 4.3 BBO优化MLP参数 5.完整程序 1.程序功能描述 基于生物地理算法的MLP多层感知机优化mat…

昇思25天学习打卡营第23天|ShuffleNet图像分类

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

Validated 中常用的注解

Validated 中常用的注解 导入依赖常用注解嵌套校验校验注解的三个参数在post 和 [get](https://so.csdn.net/so/search?qget&spm1001.2101.3001.7020) 请求上使用 添加全局异常处理器&#xff0c;处理参数验证异常 导入依赖 <dependency><groupId>org.spring…

蒙特卡罗模型★★★★★

该博客为个人学习清风建模的学习笔记&#xff0c;部分课程可以在B站&#xff1a;【强烈推荐】清风&#xff1a;数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili 目录 1引例&#xff1a;布丰投针实验 2蒙特卡罗方法概述 2.1定义 2.2提出 2…

基于词级ngram的词袋模型对twitter数据进行情感分析

按照阿光的项目做出了学习笔记&#xff0c;pytorch深度学习实战项目100例 基于词级ngram的词袋模型对twitter数据进行情感分析 什么是 N 符&#xff1f; N 格是指给定文本或语音样本中 n 个项目的连续序列。这些项目可以是音素、音节、字母、单词或碱基对&#xff0c;具体取…

C++ 基础和基本语法

文章目录 1. 简介 2. 基本解释 示例解释 3. 程序结构 HELLO WORLD 编译 & 执行 C 程序 4. 分号 和 语句块 5. 标识符 6. 关键字 7. 注释 1. 简介 C 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言&#xff0c;支持过程化编程、面向对象编…

JAVA毕业设计634—基于Java+SSM的校园快递物流管理系统(源代码+数据库+11000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSSM的校园快递物流管理系统(源代码数据库11000字论文)634 一、系统介绍 本项目分为用户、快递员、管理员三种角色 1、用户&#xff1a; 注册、登录、待取件信息管理、快…

【视觉SLAM】 十四讲ch5习题

1.*寻找一个相机&#xff08;你手机或笔记本的摄像头即可&#xff09;&#xff0c;标定它的内参。你可能会用到标定板&#xff0c;或者自己打印一张标定用的棋盘格。 参考我之前写过的这篇博客&#xff1a;【OpenCV】 相机标定 calibrateCamera Code来源是《学习OpenCV3》18.…

全国区块链职业技能大赛国赛考题前端功能开发

任务3-1:区块链应用前端功能开发 1.请基于前端系统的开发模板,在登录组件login.js、组件管理文件components.js中添加对应的逻辑代码,实现对前端的角色选择功能,并测试功能完整性,示例页面如下: 具体要求如下: (1)有明确的提示,提示用户选择角色; (2)用户可看…

2024年第二季度 DDoS 威胁趋势报告

2024 年上半年&#xff0c;Cloudflare 缓解了 850 万次 DDoS 攻击&#xff1a;第一季度 450 万次&#xff0c;第二季度 400 万次。总体而言&#xff0c;第二季度 DDoS 攻击数量环比下降了 11%&#xff0c;但同比增长了 20%。 DDoS 攻击分布&#xff08;按类型和手段&#xff09…

pytorch学习(十一)checkpoint

当训练一个大模型数据的时候&#xff0c;中途断电就可以造成已经训练几天或者几个小时的工作白做了&#xff0c;再此训练的时候需要从epoch0开始训练&#xff0c;因此中间要不断保存&#xff08;epoch&#xff0c;net&#xff0c;optimizer&#xff0c;scheduler&#xff09;等…

Java | Leetcode Java题解之第274题H指数

题目&#xff1a; 题解&#xff1a; class Solution {public int hIndex(int[] citations) {int left0,rightcitations.length;int mid0,cnt0;while(left<right){// 1 防止死循环mid(leftright1)>>1;cnt0;for(int i0;i<citations.length;i){if(citations[i]>mi…

Vue 3 实现左侧列表点击跳转滚动到右侧对应区域的功能

使用 Vue 3 实现左侧列表点击跳转到右侧对应区域的功能 1. 引言 在这篇博客中&#xff0c;我们将展示如何使用 Vue 3 实现一个简单的页面布局&#xff0c;其中左侧是一个列表&#xff0c;点击列表项时&#xff0c;右侧会平滑滚动到对应的内容区域。这种布局在很多应用场景中都…

金字塔思维:打造清晰有力的分析报告与沟通技巧

金字塔思维&#xff1a;打造清晰有力的分析报告与沟通技巧 在职场中&#xff0c;撰写一份条理清晰、逻辑严谨、说服力强的分析报告是每位职场人士必备的技能。然而&#xff0c;许多人在完成报告后常常感到思路混乱&#xff0c;表达不清。为了帮助大家解决这一问题&#xff0c;本…