多分类混淆矩阵详解

简介: 多分类混淆矩阵详解

⭐️ 前言

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

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

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

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

真实值\预测值 Predicted: 0 Predicted: 1 Predicted: N-1
Actual: 0 C[0][0] C[0][1] C[0][N-1]
Actual: 1 C[1][0] C[1][1] C[1][N-1]
Actual: N-1 C[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分数),我们可以全面地了解模型在各个类别上的表现,并据此对模型进行优化。此外,混淆矩阵的可视化可以帮助我们更直观地理解模型的性能。

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

相关文章
|
并行计算 Docker 容器
Mamba 环境安装:causal-conv1d和mamba-ssm报错解决办法
Mamba 环境安装:causal-conv1d和mamba-ssm报错解决办法
6715 0
|
机器学习/深度学习 算法 数据可视化
小白都能看懂!手把手教你使用混淆矩阵分析目标检测
首先给出定义:在机器学习领域,特别是统计分类问题中,混淆矩阵(confusion matrix)是一种特定的表格布局,用于可视化算法的性能,矩阵的每一行代表实际的类别,而每一列代表预测的类别。
3220 0
小白都能看懂!手把手教你使用混淆矩阵分析目标检测
|
机器学习/深度学习 数据可视化
深入了解多分类混淆矩阵:解读、应用与实例
深入了解多分类混淆矩阵:解读、应用与实例
深入了解多分类混淆矩阵:解读、应用与实例
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
7310 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
机器学习/深度学习 数据可视化 数据挖掘
机器学习中空间和时间自相关的分析:从理论基础到实践应用
空间和时间自相关是数据分析中的重要概念,揭示了现象在空间和时间维度上的相互依赖关系。本文探讨了这些概念的理论基础,并通过野火风险预测的实际案例,展示了如何利用随机森林模型捕捉时空依赖性,提高预测准确性。
1192 0
机器学习中空间和时间自相关的分析:从理论基础到实践应用
|
机器学习/深度学习 人工智能 算法
基于YOLOv10的无人机巡航小目标实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
基于YOLOv10的无人机巡航小目标实时检测系统,通过7444张无人机场景训练图片,训练出能检测9类目标的模型,并开发了带GUI界面的系统,支持图片、视频和摄像头实时检测,具备背景和标题更换、模型选择、检测信息展示等功能。
2072 0
基于YOLOv10的无人机巡航小目标实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
|
机器学习/深度学习 人工智能 自然语言处理
混淆矩阵(Confusion Matrix)
随着机器学习和人工智能的迅速发展,分类模型成为了解决各种问题的重要工具。然而,仅仅知道模型预测对了多少样本是不够的。我们需要一种更详细、更系统的方法来理解模型的分类能力,以及它在不同类别上的表现。 混淆矩阵是在机器学习和统计学中用于评估分类模型性能的一种表格。它对模型的分类结果进行了详细的总结,特别是针对二元分类问题,另外混淆矩阵是用于评估分类模型性能的一种表格,特别适用于监督学习中的分类问题。它以矩阵形式展示了模型对样本进行分类的情况,将模型的预测结果与实际标签进行对比。
1828 1
|
机器学习/深度学习 计算机视觉 数据可视化
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
10941 0
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
|
机器学习/深度学习 数据采集 监控
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
6421 1
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
|
机器学习/深度学习 Python
深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码
深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码
深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码