混淆矩阵、准确率、F1和召回率的具体实现及混淆矩阵的可视化

article/2025/8/25 0:06:44

        utils专栏不会细讲概念性的内容,偏向实际使用,如有问题,欢迎留言。如果对你有帮助就点个赞哈,也不搞什么粉丝可见有的没的,有帮助点个赞就ok

1、混淆矩阵、准确率、F1和召回率的计算

混淆矩阵    对于混淆矩阵的计算,这个我们直接从sklearn.metrics导入confusion_matrix计算,只需要向其中传递两个参数,一个是y_true,一个是y_pred,就可以直接得到混淆矩阵了:

from sklearn.metrics import confusion_matrix
confMatrix = confusion_matrix(label, pre)

        这个是随便拿了个数据集,加载了预训练参数,跑了1轮的混淆矩阵: 

          准确率、F1和召回率的计算我们直接使用混淆矩阵来计算,混淆矩阵可以帮助我们很好的获得以下每类的数目:

  • TP(True Positive):正确的正例,一个实例是正类并且也被判定成正类
  • FN(False Negative):错误的反例,漏报,本为正类但判定为假类
  • FP(False Positive):错误的正例,误报,本为假类但判定为正类
  • TN(True Negative):正确的反例,一个实例是假类并且也被判定成假类

准确率:

Acc=\frac{TP+TN}{ALL}

精确率:

Pre=\frac{TP}{TP+FP}

召回率:

Recall=\frac{TP}{TP+FN}

F1:

F1_score=\frac{2 \times pre \times recall}{pre + recall}

        相关的理论部分这里不过介绍,直接上代码实现,最后返回的是总的精确率、总的召回率、总的F1_score、一个图表可视化和一个几何平均,可以根据自己的需要来调整代码,比如只需要某一类的召回率等等:

        注:使用图标可视化精确率、召回率和F1时,请先:

import prettytable
def calculate_prediction_recall(label, pre, classes=None):"""计算准确率和召回率:传入预测值及对应的真实标签计算:param label:标签:param pre:对应的预测值:param classes:类别名(None则为数字代替):return:"""if classes:classes = list(range(classes))# print(classes)confMatrix = confusion_matrix(label, pre)print(confMatrix)total_prediction = 0total_recall = 0result_table = prettytable.PrettyTable()class_multi = 1result_table.field_names = ['Type', 'Prediction(精确率)', 'Recall(召回率)', 'F1_Score']for i in range(len(confMatrix)):label_total_sum_col = confMatrix.sum(axis=0)[i]label_total_sum_row = confMatrix.sum(axis=1)[i]if label_total_sum_col:     # 防止除0prediction = confMatrix[i][i] / label_total_sum_colelse:prediction = 0if label_total_sum_row:recall = confMatrix[i][i] / label_total_sum_rowelse:recall = 0if (prediction + recall) != 0:F1_score = prediction * recall * 2 / (prediction + recall)else:F1_score = 0result_table.add_row([classes[i], np.round(prediction, 3), np.round(recall, 3),np.round(F1_score, 3)])total_prediction += predictiontotal_recall += recallclass_multi *= predictiontotal_prediction = total_prediction / len(confMatrix)total_recall = total_recall / len(confMatrix)total_F1_score = total_prediction * total_recall * 2 / (total_prediction + total_recall)geometric_mean = pow(class_multi, 1 / len(confMatrix))return total_prediction, total_recall, total_F1_score, result_table, geometric_mean, confMatrix

        图标可视化的一个结果展示(注意:图标显示的是每一类的准确率、召回率和F1,函数返回的是总的准确率、召回率和F1,可以根据自己的需要进行修改代码):

2、混淆矩阵的可视化

        没什么好说的,直接上代码:

def plot_confusion_matrix(cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues):"""混淆矩阵的可视化: 传入混淆矩阵和类别名(或数字代替):param cm: 混淆矩阵:param classes: 类别:param normalize::param title::param cmap::return:"""if normalize:cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]print("Normalized confusion matrix")else:print('Confusion matrix, without normalization')plt.imshow(cm, interpolation='nearest', cmap=cmap)plt.title(title)plt.colorbar()tick_marks = np.arange(len(classes))plt.xticks(tick_marks, classes, rotation=45)plt.yticks(tick_marks, classes)fmt = '.2f' if normalize else 'd'thresh = cm.max() / 2.for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):plt.text(j, i, format(cm[i, j], fmt), horizontalalignment="center", color="white" if cm[i, j] > thresh else "black")plt.tight_layout()plt.ylabel('True label')plt.xlabel('Predicted label')plt.savefig('runs/picture/confMatrix.jpg')plt.show()

        结果展示:


http://chatgpt.dhexx.cn/article/BqPKXEDk.shtml

相关文章

预编码技术

预编码的基本原理 TD-LTE下行传输采用了MIMO-OFDM的物理层构架,通过最多4个发射天线并行传输多个(最多4个)数据流,能够有效地提高峰值传输速率。LTE的物理层处理过程中,预编码是其核心功能模块,物理下行共…

pytorch 计算混淆矩阵

混淆矩阵是评估模型结果的一种指标 用来判断分类模型的好坏 预测对了 为对角线 还可以通过矩阵的上下角发现哪些容易出错 从这个 矩阵出发 可以得到 acc ! precision recall 特异度? 目标检测01笔记AP mAP recall precision是什么 查全率是什么 查准率…

Code::Blocks 相关

文库上的使用教程 http://blog.csdn.net/JGood/article/details/5252119 使用手册 http://blog.csdn.net/liquanhai/article/details/6618300 一.Code::blocks Code::blocks集成开发环境是一个支持编译、链接、调试许多种语言的IDE,支持VS6.0到VS200…

mysql8 sql_mode去掉only_full_group_by

1.查询版本与sqlmode: select version(), sql_mode; 2.修改sqlmode,执行下面两句代码: set global sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION;set session sql_modeSTRICT_TRANS_TABLES,NO_…

- MySQL - 存储过程 Stored Procedure

文章目录 存储过程是什么存储过程的优点存储过程的缺点存储过程分类存储过程的查询语句存储过程的创建和调用语法实例 - IN、OUT、INOUT条件语句循环语句迭代 存储过程是什么 存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中,一次编译多次使…

mysql的delete语句_mysql删除语句

展开全部 mysql删除语句如下: 1、delete删除一行:delete from student where id1。 2、delete删除多行:delete from student where in (1,2,3)3。 3、删62616964757a686964616fe78988e69d8331333433623162除表的所有数据:delete f…

mysql any all some

假设现在有两张表 a , b 如下 SELECT * FROM a WHERE id > ANY(SELECT id FROM b )# any 等价于 some 这里有两个id sql的意思大概是查询a表的所有,在where中a的id > 子表 b的id 这里用到了any(some) 他们的意思是一样的,就是说a表…

mysql 的 sql_mode.only_full_group_by属性解析

文章目录 1. 初始条件2. 现象3. 解决①:关闭sql_mode 的 only_full_group_by模式②:使用 ANY_VALUE() 抑制 ONLY_FULL_GROUP_BY 的影响 mysql8.0官网:处理 group by 1. 初始条件 现在有这样一张表,其中有两条 name 裤子 的数据…

MYSQL 删除语句

删除数据(DELETE) 如果你失忆了,希望你能想起曾经为了追求梦想的你。 数据库存储数据,总会有一些垃圾数据,也会有一些不需要用的数据了,这些情况下,我们就可以删除这些数据,释放出一定的空间,给…

MySql递归RECURSIVE的详解

背景: 在实际开发的过程中,我们会遇到一些数据是层级关系的、要展示数据子父级关系的时候, 第一个解决方案:将数据库中的所有数据都查询出来用Java代码进行处理。 第二个解决方案:可以考虑MySql中的RECURSIVE递归进行…

【MYSQL WITH recursive使用】

MYSQL WITH recursive使用 MYSQL WITH recursive使用语法用法1:输出1~n或者求 1~n的和用法2 父求子创建table:user求张三后代 MYSQL WITH recursive使用 由于在项目中有使用到recursive,因此在此做记录 语法 WITH recursive 表名 AS ( 初始…

U 盘安装 CentOS7 时盘符和安装源不可用问题

记录一次在物理机上安装 CentOS7 遇到的问题及其解决办法,主要有两个问题卡住了很久,一个是盘符问题,一个就是安装源不可用的问题 。 1 No such device 1.1 问题描述 用 U 盘在物理机上安装 CentOS7 的时候,出现 could not ins…

Vmware Workstation17 安装centos7(详细教程)

1、为什么安装Vmware Vmware Workstation可以帮我们他们创建虚拟机,模拟生产环境(linux),搭建集群等。作为一个开发人员特别是后端开发人员是需要懂一些运维的,不需要精通,遇到问题能定位排查。我自己想做一个自己的项目&#xf…

用大白菜装centos7_大白菜安装centos7 踩坑记

1.准备一个U盘,安装大白菜。这个去大白菜官网下载安装就可以了 安装大白菜的时候最好选择FAT32(2021.1.7记录) 2.U盘装完大白菜后U盘会被分为两个主分区 一个盘是大白菜系统的,另外一个盘放一些工具的。 DBC里面就是放的一些工具 比如磁盘管理工具 3.把Centos7的镜像放入到DB…

Windows10安装Centos7双系统

Windows10安装Centos7双系统 1.摘要2.制作Centos 7系统盘3.Windows磁盘管理为Centos系统留出空间4.bios配置使得计算机系统选择从U盘进入5.安装Centos 7系统6.如何在Windows和Centos系统间切换7.一些问题与补救方法8.参考文章 1.摘要 本篇博客主要整理记录了在Win10 OS下安装使…

VM16上安装CentOS7详细安装教程【附图】

在VM16上安装Centos7 下载Centos安装Centos快照拍摄 下载Centos 进入Centos官网 Centos官网的下载地址 点击Download 点击x86_64 自己选择镜像下载 上面选择好自己的镜像后选择后缀名为 iso 的CentOS下载 安装Centos 点击创建新的虚拟机 选择好自定义后点击下一步…

VMware 16安装centos 7详细教程

VMware 16安装centos 7详细教程 前言:之前在VMware15 pro上安装centos7,但是启动虚拟机出现蓝屏,身边有好多小伙伴也遇到了这个问题,经过一番排查,找到了最简单的办法就是升级到VMware16pro,在启动就没有出…

在Vmware虚拟机中安装CentOS 7

前言:材料和工具 1. 安装好的VMWare虚拟机软件: ​VMWare16下载地址,获取码:ye1a 2.CentOS7下载地址:官方镜像下载 (centos.org) (官方镜像站下载比较慢) 清华大学镜像站:清华…

物理服务器安装CentOS 7操作系统

目录 1、下载系统镜像 2、制作安装盘 2.1 方法一:光盘制作 2.2 方法二:U盘制作 3、更改bios启动顺序 4、安装CentOS 7操作系统 4.1 安装命令选择,及常见错误解决 4.2 语言选择 4.3 时区选择 4.4 软件选择 4.5 安装位置选择 4.6 手…

M1芯片Macbook虚拟机安装centos7

目录 一、安装parallels Desktop、centos7 二、安装Parallels Tools 三、安装VNC server服务 四、进程占用问题 一、安装parallels Desktop、centos7 由于centon7内核版本问题用PD18等版本安装centos7进入默认是命令行安装。 命令界面安装: 1、选数字5 回车 再…