【混淆矩阵】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值等用于量化模型性能。

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

相关推荐
人机与认知实验室1 小时前
人、机、环境中各有其神经网络系统
人工智能·深度学习·神经网络·机器学习
LucianaiB1 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python
黑色叉腰丶大魔王1 小时前
基于 MATLAB 的图像增强技术分享
图像处理·人工智能·计算机视觉
PieroPc3 小时前
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
开发语言·python·excel
迅易科技4 小时前
借助腾讯云质检平台的新范式,做工业制造企业质检的“AI慧眼”
人工智能·视觉检测·制造
古希腊掌管学习的神5 小时前
[机器学习]XGBoost(3)——确定树的结构
人工智能·机器学习
ZHOU_WUYI5 小时前
4.metagpt中的软件公司智能体 (ProjectManager 角色)
人工智能·metagpt
靴子学长6 小时前
基于字节大模型的论文翻译(含免费源码)
人工智能·深度学习·nlp
梧桐树04297 小时前
python常用内建模块:collections
python
AI_NEW_COME7 小时前
知识库管理系统可扩展性深度测评
人工智能