多分类混淆矩阵详解

⭐️ 前言

在机器学习和数据科学中,混淆矩阵(Confusion Matrix)是一个重要的工具,用于评估分类模型的性能。特别是在多分类问题中,混淆矩阵能够清晰地展示模型在每个类别上的预测结果。以下是对多分类混淆矩阵的详细解释。

在这里插入图片描述

⭐️ 1. 混淆矩阵的基本概念

混淆矩阵是一个N x N的矩阵(N代表类别数量),它的每一行代表一个实际类别,每一列代表一个预测类别。矩阵中的每个元素C[i][j]表示实际为第i类但被预测为第j类的样本数量。

在多分类问题中,混淆矩阵的结构如下:

真实值\预测值Predicted: 0Predicted: 1Predicted: N-1
Actual: 0C[0][0]C[0][1]C[0][N-1]
Actual: 1C[1][0]C[1][1]C[1][N-1]
Actual: N-1C[N-1][0]C[N-1][1]C[N-1][N-1]

⭐️ 2. 混淆矩阵中的重要指标

真正例(True Positives, TP):实际为正例且预测为正例的样本数量,对应矩阵的对角线元素C[i][i]。

假正例(False Positives, FP):实际为负例但预测为正例的样本数量,对应矩阵非对角线上的元素C[i][j](i ≠ j)。

真负例(True Negatives, TN):在多分类问题中通常不直接计算,但在二分类问题中用于表示实际为负例且预测为负例的样本数量。

假负例(False Negatives, FN):实际为正例但预测为负例的样本数量,在多分类问题中,这通常表示被错误分类到其他类别的样本。

在这里插入图片描述

⭐️ 3. 从混淆矩阵计算评估指标

在这里插入图片描述

⭐️ 4. 使用Python计算混淆矩阵和评估指标

在Python中,我们可以使用sklearn.metrics模块来计算混淆矩阵和评估指标。以下是一个简单的示例:

from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score  
from sklearn.model_selection import train_test_split  
from sklearn.datasets import load_iris  
from sklearn.svm import SVC  # 加载数据集  
iris = load_iris()  
X = iris.data  
y = iris.target  # 划分数据集为训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 训练模型(这里使用SVM作为示例)  
clf = SVC(kernel='linear', C=1, random_state=42)  
clf.fit(X_train, y_train)  # 对测试集进行预测  
y_pred = clf.predict(X_test)  # 计算混淆矩阵  
cm = confusion_matrix(y_test, y_pred)  
print("Confusion Matrix:")  
print(cm)  # 计算准确率  
accuracy = accuracy_score(y_test, y_pred)  
print("Accuracy:", accuracy)  # 计算每个类别的精准率、召回率和F1分数  
precision = precision_score(y_test, y_pred, average=None)  
recall = recall_score(y_test, y_pred, average=None)  
f1 = f1_score(y_test, y_pred, average=None)  # 打印每个类别的精准率、召回率和F1分数  
print("Precision per class:", precision)  
print("Recall per class:", recall)  
print("F1 Score per class:", f1)  # 如果你想获得一个全局的评估指标,可以计算它们的平均值
precision_avg = precision_score(y_test, y_pred, average='macro')  # 宏平均  
recall_avg = recall_score(y_test, y_pred, average='macro')  
f1_avg = f1_score(y_test, y_pred, average='macro')  print("Macro average Precision:", precision_avg)  
print("Macro average Recall:", recall_avg)  
print("Macro average F1 Score:", f1_avg)import seaborn as sns  
import matplotlib.pyplot as plt  # 绘制混淆矩阵  
plt.figure(figsize=(10, 7))  
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')  
plt.xlabel('Predicted')  
plt.ylabel('Truth')  
plt.show()

运行结果如下

Confusion Matrix:
[[10  0  0][ 0  9  0][ 0  0 11]]
Accuracy: 1.0
Precision per class: [1. 1. 1.]
Recall per class: [1. 1. 1.]
F1 Score per class: [1. 1. 1.]
Macro average Precision: 1.0
Macro average Recall: 1.0
Macro average F1 Score: 1.0

混淆矩阵绘制如下

在这里插入图片描述

⭐️ 5. 解读混淆矩阵

在混淆矩阵中,对角线上的值(C[i][i])越大越好,因为它们表示正确分类的样本数量。而非对角线上的值越小越好,因为它们表示错误分类的样本数量。

如果某个类别的TP值很低,而FN值很高,那么说明模型在这个类别上的召回率很低,即模型漏掉了很多这个类别的样本。相反,如果某个类别的FP值很高,而TN值(在多分类问题中不直接计算)相对较低,那么说明模型在这个类别上的精准率很低,即模型错误地将很多其他类别的样本预测为这个类别。

在这里插入图片描述

⭐️ 总结

混淆矩阵是评估多分类模型性能的有力工具。通过计算混淆矩阵和基于它计算出的评估指标(如准确率、精准率、召回率和F1分数),我们可以全面地了解模型在各个类别上的表现,并据此对模型进行优化。此外,混淆矩阵的可视化可以帮助我们更直观地理解模型的性能。

笔者水平有限,若有不对的地方欢迎评论指正!

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

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

相关文章

IDEA下项目发送到Gitee

一、首先在Gitee创建一个仓库(什么都不选,这是最简单的方式,否则需要 pull push等一些操作,我嫌麻烦) 二、按图点击(创建存储区,选择你要上传的项目) 三、按图点击后正常文件名会变绿…

python中关于函数的两种链式调用

函数之间的嵌套调用之函数的返回值就是另一个函数的参数 用一个函数的返回值作为另一个函数的参数。 如上图所示,将is0dd(10)的结果交给print函数来执行。 如上图所示,也是一个链式调用的案例,先将add(x&a…

gitlab之cicd的gitlab-runner cicd实践-rpm离线安装

目录 概述资源官方资源离线资源 操作环境验证gitlab-runner安装注意事项重启向gitlab注册CICD流程测试 概述 gitlab此文使用rpm离线安装的方式,使用 gitlab-runner dockerfile构建运行环境: 如有兴趣可以参考这篇文章   gitlab选择 docker-compose 执行…

关于JavaScript技术的基础内容汇总

目录 JavaScript 基础知识1. JavaScript 基本语法2. 变量和常量3. 数据类型4. 运算符5. 控制结构6. 函数7. 对象8. 数组9. 事件处理10. DOM 操作 JavaScript 基础知识 学习 JavaScript(简称 JS)是前端开发的重要组成部分,它是一种动态的、弱…

GIGE 协议摘录 —— GVCP 协议(二)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现(一) GIGE 协议摘录 —— GVCP 协议(二) GIGE 协议摘录 —— GVSP 协议(三) GIGE 协议摘录 —— 引导寄存器(四) GIGE 协议…

新品!和芯星通全系统全频高精度板卡UB9A0首发

6月6日,和芯星通发布了UB9A0全系统全频高精度GNSS板卡,主要应用于CORS站、便携基站、GNSS全球监测跟踪站等。延续了上一代产品高质量原始观测量的特点,UB9A0在性能和稳定性方面均表现出众。 UB9A0基于射频基带及高精度算法一体化的GNSS SoC芯…

新能源汽车内卷真相

导语:2025年,我国新能源汽车总产能预计可达3661万辆,如此产能如何消化? 文 | 胡安 “这样卷下去不是办法,企业目的是什么?是盈利,为国家作贡献,为社会作贡献。我们应该有大格局&…

问题:1、彩色餐巾可以渲染就餐气氛,下列说法错误的是 #知识分享#其他

问题:1、彩色餐巾可以渲染就餐气氛,下列说法错误的是 A.如艳红、大红餐巾给人以庄重热烈的感觉; B.橘黄、鹅黄色餐巾给人以高贵典雅的感觉; C.湖蓝色在夏天能给人以凉爽、舒适之感&#xff1…

大数据之HDFS磁盘扩容(linux磁盘扩容)

之所以扩容,是因为当前大数据平台已经接入了不同来源的数据,当执行mapreduce任务时,会发生磁盘爆满,导致hdfs爆红 具体扩容方案如下: 1、查看云磁盘分区情况 fdisk -l . 可以从图看出: /dev/vda 数据盘磁盘容量为21.5GB,包含/dev/vda1分区 /dev/vdb 数…

【大模型】Ollama+open-webui/Anything LLM部署本地大模型构建RAG个人知识库教程(Mac)

目录 一、Ollama是什么? 二、如何在Mac上安装Ollama 1. 准备工作 2. 下载并安装Ollama 3. 运行Ollama 4. 安装和配置大型语言模型 5. 使用Ollama 三、安装open-webui 1. 准备工作 2. Open WebUI ⭐的主要特点 3. Docker安装OpenWebUI,拉去太慢…

大学信息资源管理试题及答案,分享几个实用搜题和学习工具 #职场发展#微信

人工智能技术的发展正逐渐改变着我们的生活,学习如何运用这些技术将成为大学生的必备素养。 1.彩虹搜题 这是个微信公众号 算法持续优化,提升搜题效果。每一次搜索都更精准,答案更有价值。 下方附上一些测试的试题及答案 1、在SpringMVC配…

k8s-pod参数详解

目录 概述创建Pod编写一个简单的Pod添加常用参数为Pod的容器分配资源网络相关Pod健康检查启动探针存活探针就绪探针 作用整个Pod参数配置创建docker-registry 卷挂载 结束 概述 k8s中的pod参数详解。官方文档   版本 k8s 1.27.x 、busybox:stable-musl、nginx:stable-alpine3…

【RabbitMQ基础】-RabbitMQ:初识MQ[1]

简介 RabbitMQ (高性能的异步通讯组件) RabbitMQ是一个开源的消息队列中间件,它实现了高级消息队列协议(AMQP)标准。它是一种可靠、可扩展、灵活和可插拔的解决方案,用于处理异步消息传递和事件驱动系统。…

《广告数据定量分析》读书笔记之统计原理2

3.相关分析:描述的是两个数值变量间关系的强度。(两个数值型变量之间的关系) (1)图表表示:散点图 (2)衡量关系强度指标:相关系数r。 (r的取值为-1到 1&…

.net 下的身份认证与授权的实现

背景 任何一个系统,都需要对于底层访问的页面和接口进行安全的处理,其中核心就是认证和授权。 另外一个问题就是在实际编程过程中,我们的代码有不同的模式,不同的分层或者在不同的项目之中,如何在不同的地方取得用户…

Python画图(多图展示在一个平面)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

各平台对象存储

一、阿里云对象存储 官方文档:https://help.aliyun.com/zh/oss/getting-started/getting-started-with-oss?spma2c4g.11186623.0.0.299a646c6nWWcW 1.引入maven 官网:https://help.aliyun.com/zh/oss/developer-reference/java-installation?spma2c…

小白学linux | 使用正则表达式审计ssh登录ip地址

Ubuntu /var/log/auth.log记录了所有与身份验证相关的事件,包括SSH登录尝试 grep -i "failed password" /var/log/auth.log | \awk {if($11 ~/^[0-9]\.[0-9]\.[0-9]\.[0-9]$/)print $11 ; else print $13} | \uniq -c | sort -nr -k1 RedHat系发行版 /va…

AI大模型,普通人如何抓到红利?AI+产品经理还有哪些机会

前言 随着人工智能技术的飞速发展,AI大模型正逐渐渗透到我们的工作和生活中,为普通人带来了前所未有的便利和机遇。然而,如何有效地抓住这些红利,让AI大模型为我们所用,成为了许多人关注的焦点。 对于普通人而言&…

Threejs-04、物体的缩放与旋转

1、物体的缩放 因为物体的scale属性是vector对象,因此按照vector的属性和方法,设置x/y/z轴的缩放大小 //例如设置x轴放大3倍、y轴方向放大2倍、z轴方向不变 cube.scale.set(3, 2, 1); //单独设置某个轴的缩放 cube.scale.x = 32、物体设置旋转 因为的旋转通过设置rotation属性…