混淆矩阵 评价指标

本文介绍了如何使用PyTorch和TensorFlow计算分类模型的混淆矩阵,详细解释了准确率、精确率、召回率和特异度等评估指标,特别强调了在医学影像等领域的重要性,以及在样本不平衡情况下的模型性能分析。还提供了Python代码实例来创建和解读混淆矩阵图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

参考视频:

使用pytorch和tensorflow计算分类模型的混淆矩阵_哔哩哔哩_bilibili

混淆矩阵是评判模型结果的一种指标,属于模型评估的一部分,常用于评判分类器模型的优劣。

准确率:所有预测正确的验证集样本个数/所有的验证集样本个数。在混淆矩阵中,分子为对角线上所有数字之和,分母为混淆矩阵所有数字之和。

计算公式

实例

准确率

精确率

召回率(sensitivity)

特异度

其他

SE、SP和YI是评估分类模型性能时常用的几个统计指标,特别是在医学影像处理、疾病诊断等领域,这些指标帮助了解模型对于正负类样本的识别能力。

  • SE (Sensitivity),也称为真正率(True Positive Rate, TPR)召回率(Recall),衡量的是模型正确识别正类(病例)的能力。计算公式为:其中,TP(True Positives)是真正例的数量,FN(False Negatives)是假负例的数量。

  • SP (Specificity),也称为真负率(True Negative Rate, TNR),衡量的是模型正确识别负类(非病例)的能力。计算公式为:其中,TN(True Negatives)是真负例的数量,FP(False Positives)是假正例的数量。

  • YI (Youden’s Index),也称为Youden指数,是一个综合考虑了敏感性和特异性的指标,用于评价测试的总体有效性。计算公式为:Youden指数的范围从0到1,值越大表示测试的性能越好,即同时具有较高的敏感性和特异性。

这些指标对于理解模型在特定任务上的表现至关重要,尤其是在正负样本分布不平衡的情况下。通过评估敏感性和特异性,可以确保模型不仅仅是优先预测多数类,而是真正能够区分不同类别的样本。Youden指数提供了一个简单的度量标准,以确定模型是否在不牺牲一个指标的情况下,同时优化了敏感性和特异性。

代码实战2

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix
import matplotlib

# 创建示例的混淆矩阵数据
actual_labels = ['cat', 'dog', 'bird']
predicted_labels = ['cat', 'dog', 'bird']
confusion_mat = np.array([[10, 2, 1],
                          [3, 15, 2],
                          [0, 1, 8]])

# 创建混淆矩阵图像
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_mat, annot=True, cmap='Blues', xticklabels=predicted_labels, yticklabels=actual_labels)
# annot=True 参数用于在每个单元格中显示数值  cmap='Blues'参数用于设置颜色映射。

# 添加图像标题和坐标轴标签
plt.title('Confusion Matrix')
plt.xlabel('Predicted Labels')
plt.ylabel('Actual Labels')

# Save the figure
plt.savefig('confusion_matrix.png', dpi=300)  # Saves the plot as a PNG file with 300 DPI

# 显示图像
plt.show()

 探究每个类的准确率、召回率sensitivity记忆平均准确率的关系

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix
import matplotlib

# 创建示例的混淆矩阵数据
actual_labels = ['cat', 'dog', 'bird']
predicted_labels = ['cat', 'dog', 'bird']
confusion_mat = np.array([[10, 2, 1],
                          [3, 15, 2],
                          [0, 1, 8]])

# 创建混淆矩阵图像
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_mat, annot=True, cmap='Blues', xticklabels=predicted_labels, yticklabels=actual_labels)
# annot=True 参数用于在每个单元格中显示数值  cmap='Blues'参数用于设置颜色映射。

# 添加图像标题和坐标轴标签
plt.title('Confusion Matrix')
plt.xlabel('Predicted Labels')
plt.ylabel('Actual Labels')

# Save the figure
plt.savefig('confusion_matrix2.png', dpi=300)  # Saves the plot as a PNG file with 300 DPI

# 显示图像
plt.show()

# 计算平均准确率
total_correct = np.trace(confusion_mat)  # 对角线元素之和
total_samples = np.sum(confusion_mat)    # 所有元素之和
average_accuracy = total_correct / total_samples
print(f'Average Accuracy: {average_accuracy:.2f}')

# 计算每个类别的精确度(Precision)
precision_per_class = confusion_mat.diagonal() / np.sum(confusion_mat, axis=0)
for label, precision in zip(actual_labels, precision_per_class):
    print(f'Precision for {label}: {precision:.2f}')

# 计算每个类别的准确率(Recall)
recall_per_class = confusion_mat.diagonal() / np.sum(confusion_mat, axis=1)
for label, recall in zip(actual_labels, recall_per_class):
    print(f'Recall for {label}: {recall:.2f}')

实验结果表明:

每个类的召回率就是每个类的准确率。平均准确率就是就是所有类的召回率的和的平均值。

召回率(Recall)也被称为敏感度(Sensitivity)或真阳性率(True Positive Rate, TPR)

越高的召回率表示模型能够更好地检测出正类样本。

### 计算混淆矩阵评价指标 对于二分类问题,构建混淆矩阵并计算其评价指标是一个重要的过程。通过统计真正例(True Positive, TP),假负例(False Negative, FN),假正例(False Positive, FP) 和真负例(True Negative, TN) 的数量来完成这一工作。 #### 准确率 (Accuracy) 准确率是指所有预测正确的样本占总样本的比例。公式表示为: \[ \text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{FP} + \text{FN} + \text{TN}} \] 例如,在垃圾邮件分类的例子中,如果共有100封邮件,其中80封是非垃圾邮件(TN=75, FP=5), 20封是垃圾邮件(TP=15, FN=5),那么准确率为: \[ \text{Accuracy} = \frac{15 + 75}{15 + 5 + 5 + 75} = 90\% \][^1] #### 召回率 (Recall 或 Sensitivity) 召回率衡量的是实际为正类别的样本中有多少比例被正确识别出来。公式定义如下: \[ \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} \] 继续上面的例子,对于这20封垃圾邮件而言,有15封被成功检测到,则召回率为: \[ \text{Recall} = \frac{15}{15 + 5} = 75\% \][^1] #### 精确度 (Precision) 精确度反映了在所有预测为正类别的情况下有多少是真的正类别成员。具体表达方式为: \[ \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} \] 同样基于之前的案例数据,即在这总共20个标记为垃圾邮件的结果里实际上只有15个确实如此,因此精度为: \[ \text{Precision} = \frac{15}{15 + 5} = 75\% \][^3] #### F1分数 (F1 Score) F1分数是精确度和召回率之间的调和均值,用来平衡两者的重要性。它由下述方程给出: \[ \text{F1-Score} = 2 * (\frac{\text{Precision} * \text{Recall}}{\text{Precision} + \text{Recall}}) \] 利用上述得到的数据,可以得出该模型关于垃圾邮件分类的F1得分为: \[ \text{F1-Score} = 2 * (\frac{75\% * 75\%}{75\% + 75\%}) ≈ 75\%\][^2] ```python def calculate_metrics(tp, tn, fp, fn): accuracy = (tp + tn) / (tp + fp + fn + tn) recall = tp / (tp + fn) precision = tp / (tp + fp) f1_score = 2 * ((precision * recall) / (precision + recall)) return { 'accuracy': round(accuracy*100, 2), 'recall': round(recall*100, 2), 'precision': round(precision*100, 2), 'f1_score': round(f1_score*100, 2) } metrics = calculate_metrics(15, 75, 5, 5) print(metrics) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值