【Python绘图】两种绘制混淆矩阵的方式 (ConfusionMatrixDisplay(), imshow()) 以及两种好看的colorbar

news2024/11/19 19:14:11

在机器学习领域,混淆矩阵是一个评估分类模型性能的重要工具。它不仅展示了模型预测的准确性,还揭示了模型在不同类别上的表现。本文介绍两种在Python中绘制混淆矩阵的方法:ConfusionMatrixDisplay()imshow(),以及两种好看的colorbar:coolwarm_rGnBu 以增强可视化效果。


目录

  • ConfusionMatrixDisplay()
      • 基本用法:
      • 参数和方法:
      • 示例:
      • 示例代码:
  • imshow()
      • 基本用法:
      • 参数:
      • 示例:
      • 示例代码:
  • 两种 colorbar


ConfusionMatrixDisplay()

ConfusionMatrixDisplay() 是一个来自 scikit-learn 库的类,用于可视化混淆矩阵。

sklearn.metrics.ConfusionMatrixDisplay 的官方社区描述:

  • 中文社区:https://scikit-learn.org.cn/view/582.html
  • 英文社区:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ConfusionMatrixDisplay.html

基本用法:

ConfusionMatrixDisplay 可以通过以下方式创建:

from sklearn.metrics import ConfusionMatrixDisplay

# 假设 cm 是一个混淆矩阵
disp = ConfusionMatrixDisplay(confusion_matrix=cm)
disp.plot()

参数和方法:

  • confusion_matrix: 参数,一个形状为 (n_classes, n_classes) 的 ndarray,表示混淆矩阵。
  • display_labels: 参数,一个形状为 (n_classes,) 的 ndarray,默认为 None。用于设置绘图时的标签。如果为 None,则显示标签从 0 到 n_classes - 1。
  • plot(): 方法,绘制混淆矩阵的可视化。

示例:

在这里插入图片描述

在这里插入图片描述

示例代码:

from sklearn.metrics import ConfusionMatrixDisplay
import os
import matplotlib.pyplot as plt

import numpy as np
import numpy.random as npr
npr.seed(0)

# Save path
save_path = './plot'
os.makedirs(save_path, exist_ok=True)

# Generate random data 0~1
n = 10
data = npr.rand(n, n) * 0.8
for i in range(n):
    data[i, i] = 1.0

# Plot confusion matrix
fig, ax = plt.subplots(figsize=(8, 8))

cm = ConfusionMatrixDisplay(data, display_labels=np.arange(n))
cm.plot(ax=ax, cmap="GnBu", include_values=False, xticks_rotation=90)  # GnBu, coolwarm_r

ax.set_xlabel('Trials', fontsize=20)
ax.set_ylabel('Trials', fontsize=20)

plt.title(f'Confusion matrix', fontsize=30)
plt.tight_layout()

plt.savefig(f'{save_path}/confu_mat_1-2.png', dpi=300)
plt.show()


imshow()

imshow() 是一个来自 Matplotlib 库的函数,用于在图形用户界面(GUI)中显示图像。这个函数可以处理多种类型的图像数据,包括灰度图和彩色图,是 Matplotlib 中用于图像显示的基础函数之一。

matplotlib.pyplot.imshow 的官方描述:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imshow.html

基本用法:

import matplotlib.pyplot as plt
import numpy as np

# 创建一个随机数组作为图像数据
image_data = np.random.rand(10, 10)

# 使用 imshow() 显示图像
plt.imshow(image_data)
plt.colorbar()  # 显示颜色条
plt.show()

参数:

imshow() 函数接受多个参数,以下是一些常用的参数:

  • X: 图像数据,可以是 2D 数组(灰度图)或 3D 数组(彩色图)。
  • cmap: 颜色映射表,用于定义颜色。例如,cmap=‘gray’ 表示灰度图,cmap=‘viridis’ 是一种常用的彩色映射。
  • norm: 归一化对象,用于调整数据值到 [0, 1] 范围。
  • aspect: 图像的纵横比,可以是 ‘auto’、‘equal’ 或一个数值。
  • interpolation: 插值方法,用于定义图像的缩放方式,如 ‘nearest’、‘bilinear’、‘bicubic’ 等。
  • alpha: 图像的透明度。

imshow() 返回一个 AxesImage 对象,这个对象包含了图像的显示信息,可以用来进一步定制图像的显示效果。

示例:

在这里插入图片描述

在这里插入图片描述

  • ConfusionMatrixDisplay()内置函数定义了所绘制的混淆矩阵必须为方针,而imshow()可以绘制行列数不等的矩形:

在这里插入图片描述

在这里插入图片描述

示例代码:

from mpl_toolkits.axes_grid1 import make_axes_locatable

import os
import matplotlib.pyplot as plt

import numpy as np
import numpy.random as npr
npr.seed(0)

# Save path
save_path = './plot'
os.makedirs(save_path, exist_ok=True)

# Generate random data 0~1
m = 6
n = 10
data = npr.rand(m, n) * 0.8
if m == n:
    for i in range(n):
        data[i, i] = 1.0

fig, ax = plt.subplots(figsize=(n, m))
cm = ax.imshow(data, cmap='coolwarm_r', interpolation="nearest", vmin=0.0, vmax=1.0)  # coolwarm_r, GnBu

# # 绘制一条对角线
# ax.plot([-0.5, n + 0.5], [-0.5, n + 0.5], color='black', alpha=0.2)

ax.set_xticks(np.arange(n))
ax.set_yticks(np.arange(m))

ax.set_xticklabels(np.arange(n), fontsize=15, rotation=90)
ax.set_yticklabels(np.arange(m), fontsize=15)

plt.xlabel('N', fontsize=20)
plt.ylabel('M', fontsize=20)

plt.title(f'Confusion matrix', fontsize=30)

divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="4%", pad=0.2)
cb = fig.colorbar(cm, cax=cax)
cb.ax.tick_params(labelsize=15)

plt.tight_layout()

plt.savefig(f'{save_path}/confu_mat_3-1.png', dpi=300)
plt.show()


两种 colorbar

  • coolwarm_r
    在这里插入图片描述

  • GnBu
    在这里插入图片描述

更多 colorbar:https://astromsshin.github.io/science/code/matplotlib_cm/index.html
在这里插入图片描述


创作不易,麻烦点点赞和关注咯!

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

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

相关文章

el-table 数据去重后合并表尾合计行,金额千分位分割并保留两位小数,表尾合计行表格合并

问题背景 最近在做后台管理项目el-table 时候需要进行表尾合计,修改合计后文字的样式,合并单元格。 想实现的效果 合并表尾单元格前三列为1格;对某些指定的单元格进行表尾合计;合计后的文本样式加粗;涉及到金额需要千…

Shell脚本2 -- 永久环境变量与字符串操作

声明: 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(2)永久环境变量和字符串显位】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联…

红日靶场-1详细解析(适合小白版)

红日靶场涉及内网知识,和前期靶场不太一样,前期靶场大部分都是单个靶机获得root权限,而这一次更综合,后期也会继续学习内网知识,继续打红日靶场,提高自己的综合技能。 环境搭建 首先本题的网络拓扑结构如…

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历,分享给大家 作者是如何在没有 iOS 开发经验的情况下,借助 AI(如 Claude 3 模型)成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月,ChatGPT 诞生并迅速引发全球关注。…

【环境配置】macOS配置jdk与maven

配置jdk与maven 配置jdk与切换java版本命令 maven安装与配置国内镜像源 用到的命令 # 进入 JDK 安装目录 cd /Library/Java/JavaVirtualMachines# 查看文件 ls ➜ jdk-1.8.jdk jdk-11.jdk# 查看路径 pwd ➜ /Library/Java/JavaVirtualMachines# 打开环境变量配置文件 vi &…

新手教学系列——善用 VSCode 工作区,让开发更高效

引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…

<项目代码>YOLOv8 草莓成熟识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

【SpringBoot】发送简单邮件

在Spring Boot中发送邮件是一个常见的需求&#xff0c;通常使用JavaMail API结合Spring的邮件抽象来实现。Spring Boot提供了一个简单的配置和使用邮件发送的方法。 简单使用 添加依赖 首先&#xff0c;你需要在你的pom.xml文件中添加Spring Boot Starter Mail依赖。 <d…

Python模块、迭代器与正则表达式day10

1、Python模块 1.1模块的简介 在编写代码的时候&#xff0c;创建的.py文件就被称为一个模块 1.2模块的使用 想要在a文件里使用b文件的时候&#xff0c;只要在a文件中使用关键字import导入即可 1.2.2 from ...import...语句 导入模块可以使用import&#xff0c;如果只导入模…

ABAP开发学习——SNRO

SAP凭证号码的指定分为外部给号和内部给号。 Internal number range即内部给号,指系统根据预先维护好的号码范围&#xff08;只能是阿拉伯数字&#xff09;依序给号,给出已有数字的下一个编号。 External number range即外部给号,后台配置时指指定一个号码范围&#xff08;可以…

数据科学与SQL:如何计算排列熵?| 基于SQL实现

目录 0 引言 1 排列熵的计算原理 2 数据准备 3 问题分析 4 小结 0 引言 把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大&#xff0c;说明系统越混乱&#xff0c;携带的信息越少&#xff1b;熵越小&#xff0c;说明系统越有序&#xff0c;携带的信息越多。在传感…

CSS(8):盒子阴影与文字阴影

一&#xff1a;盒子阴影text-shadow属性 1.box-shadow&#xff1a;h-shadow v-shadow blur spread color inset; 默认的是外部阴影outset&#xff0c;不能写在代码上 2.鼠标经过盒子后的阴影 rgba透明度 3.文字阴影 text-shadow:水平偏移 垂直偏移 模糊度 阴影颜色; 注意点…

《Python编程实训快速上手》第七天--文件与文件路径

该章节将使用Python在硬盘上创建、读取和保存文件 一、文件与文件路径 1、Windows中使用\以及macOS和Linux中使用/ 使用pathlib模块中的Path()函数进行文件名和目录的拼接,返回文件路径字符串 from pathlib import Path print(Path("spam","bacon",&qu…

Springboot如何打包部署服务器

文章目的&#xff1a;java项目打包成jar包或war包&#xff0c; 放在服务器上去运行 一、编写打包配置 1. pom.xml 在项目中的pom.xml文件里面修改<build>...</build>的代码 >> 简单打包成Jar形式&#xff0c;参考示例&#xff1a; <build><fina…

Video Duplicate Finder 快速识别并去除重复的视频和图像!

文章目录 下载 后续升级 Video Duplicate Finder&#xff08;视频重复查找器&#xff09;是一款开源的跨平台视频&#xff08;以及图像&#xff09;去重软件&#xff0c;通过对比文件内容和特征&#xff0c;快速识别出重复的视频和图像文件&#xff0c;即使是被压缩裁剪过、…

Python实现基础到高级:语音验证码技术详解

目录 一、语音验证码基础 1.1 语音验证码概述 1.2 Python语音验证码库 二、Python生成语音验证码 2.1 使用captcha库生成语音验证码 2.2 使用第三方语音合成服务API生成语音验证码 三、Python识别语音验证码 3.1 语音识别技术概述 3.2 使用百度语音识别API识别语音验证…

(附项目源码)Java开发语言,215 springboot 大学生爱心互助代购网站,计算机毕设程序开发+文案(LW+PPT)

摘 要 在网络信息的时代&#xff0c;众多的软件被开发出来&#xff0c;给用户带来了很大的选择余地&#xff0c;而且人们越来越追求更个性的需求。在这种时代背景下&#xff0c;企业只能以用户为导向&#xff0c;按品种分类规划&#xff0c;以产品的持续创新作为企业最重要的竞…

后端:Spring AOP原理--动态代理

文章目录 1. Spring AOP底层原理2. 代理模式3. 静态代理4. 动态代理4.1 jdk 实现动态代理4.2 cglib 实现动态代理4.3 jdk、cglib动态代理两者的区别 1. Spring AOP底层原理 创建容器 new applicationContext()&#xff1b;Spring把所有的Bean进行创建&#xff0c;进行依赖注入…

halcon3D gen_image_to_world_plane_map的图像高精度拼接技术

基于上一篇文章&#xff0c;对gen_image_to_world_plane_map有了深刻的理解 https://blog.csdn.net/Tianwen_running/article/details/143661157?fromshareblogdetail&sharetypeblogdetail&sharerId143661157&sharereferPC&sharesourceTianwen_running&s…

STM32 独立看门狗(IWDG)详解

目录 一、引言 二、独立看门狗的作用 三、独立看门狗的工作原理 1.时钟源 2.计数器 3.喂狗操作 4.超时时间计算 5.复位机制 四、独立看门狗相关寄存器 1.键寄存器&#xff08;IWDG_KR&#xff09; 2.预分频寄存器&#xff08;IWDG_PR&#xff09; 3.重载寄存器&…