自学内容网 自学内容网

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

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


原文地址:https://blog.csdn.net/gaoxiaoxiao1209/article/details/142211574

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!