【混淆矩阵】Confusion Matrix!定量评价的基础!如何计算全面、准确的定量指标去衡量模型分类的好坏??

【混淆矩阵】Confusion Matrix!定量评价的基础!

如何计算全面、准确的定量指标去衡量模型分类的好坏??


文章目录


在深度学习的分类问题中,二分类和多分类的结果常用混淆矩阵(Confusion Matrix)来呈现。此外,还有许多评价指标用于衡量模型性能,比如精度(Accuracy)、查准率(Precision)、召回率(Recall)、F1值等。

1. 混淆矩阵

对于二分类问题,混淆矩阵通常是一个 2 × 2 2×2 2×2 的矩阵:

  • TP(True Positive): 预测为正类,且实际为正类。
  • FP(False Positive): 预测为正类,但实际为负类。
  • FN(False Negative): 预测为负类,但实际为正类。
  • TN(True Negative): 预测为负类,且实际为负类。

对于多分类问题,混淆矩阵的维度为 n × n n×n n×n,其中 n n n 是类别数量。每个元素 C i j C_{ij} Cij表示实际类别 i i i被预测为类别 j j j的次数。

2.评价指标

  • 精度(Accuracy)
    精度是所有预测正确的比例,计算公式为:
  • 查准率(Precision)
    查准率衡量的是模型在预测为正类的样本中,实际为正类的比例:
  • 召回率(Recall)
    召回率衡量的是在所有实际为正类的样本中,模型能正确预测为正类的比例:
  • F1值(F1-Score)
    F1值是 Precision 和 Recall 的调和平均数,用来平衡查准率和召回率:
  • 特异度(Specificity)
    特异度衡量的是在所有实际为负类的样本中,模型能正确预测为负类的比例:
  • ROC曲线与AUC
    ROC曲线: 以假正率(FPR)为横轴,真正率(TPR,即召回率)为纵轴的曲线。
    AUC(Area Under Curve): ROC曲线下的面积,表示模型分类能力。
    FPR 公式为:

3.混淆矩阵及评价指标的实现(Python代码示例)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc
import seaborn as sns

# 模拟真实标签和预测标签
y_true = [0, 1, 1, 0, 1, 0, 1, 0, 0, 1]
y_pred = [0, 0, 1, 0, 1, 0, 1, 1, 0, 1]

# 计算混淆矩阵
cm = confusion_matrix(y_true, y_pred)
print("Confusion Matrix:\n", cm)

# 混淆矩阵的可视化
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.show()

# 计算各项评价指标
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print(f'Accuracy: {accuracy}')
print(f'Precision: {precision}')
print(f'Recall: {recall}')
print(f'F1 Score: {f1}')

# 计算并绘制ROC曲线
fpr, tpr, thresholds = roc_curve(y_true, y_pred)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, color='blue', label=f'AUC = {roc_auc:.2f}')
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

4.多分类问题中的评价指标

在多分类问题中,Precision、Recall 和 F1值可以通过**微平均(micro average)和宏平均(macro average)**来计算:

  • 微平均:对所有类的 TP、FP、FN 求和后再计算指标。

  • 宏平均 :分别计算每个类别的 Precision、Recall 和 F1,然后取平均。
    你可以通过 average 参数在 sklearn 的 Precision_score、Recall_score 和 F1_score 中选择不同的方式:

    多分类示例

    y_true_multi = [0, 1, 2, 1, 2, 0, 1, 2, 0, 1]
    y_pred_multi = [0, 2, 1, 1, 2, 0, 1, 2, 0, 2]

    计算宏平均和微平均

    precision_macro = precision_score(y_true_multi, y_pred_multi, average='macro')
    precision_micro = precision_score(y_true_multi, y_pred_multi, average='micro')

    print(f'Macro Average Precision: {precision_macro}')
    print(f'Micro Average Precision: {precision_micro}')

5.总结

  • 混淆矩阵提供了一个直观的工具来查看模型的预测效果。

  • 评价指标如精度、查准率、召回率、F1值等用于量化模型性能。

  • 多分类问题中,可以使用宏平均和微平均来评价模型在多个类别上的表现。

相关推荐
魔道不误砍柴功几秒前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
_.Switch25 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
AI极客菌1 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭1 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^1 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
Power20246662 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k2 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫2 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班2 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型