微信登录

评估指标 - 分类指标 - 准确率、召回率等

PyTorch 《评估指标 - 分类指标 - 准确率、召回率等》

在机器学习的分类任务中,准确评估模型的性能至关重要。不同的评估指标可以从不同角度反映模型的表现,帮助我们更好地理解模型的优势与不足。在 PyTorch 中,我们可以方便地计算各种分类指标。本文将详细介绍常见的分类评估指标,包括准确率、召回率等,并给出使用 PyTorch 实现的示例。

混淆矩阵

在介绍具体的评估指标之前,我们先了解一下混淆矩阵(Confusion Matrix)。混淆矩阵是一个用于总结分类模型预测结果的矩阵,它可以清晰地展示模型在每个类别上的分类情况。对于一个二分类问题,混淆矩阵通常是一个 2x2 的矩阵,如下所示:

预测为正类 预测为负类
实际为正类 真正例(True Positive, TP) 假负例(False Negative, FN)
实际为负类 假正例(False Positive, FP) 真负例(True Negative, TN)

真正例表示模型正确地将正类样本预测为正类;假负例表示模型将正类样本错误地预测为负类;假正例表示模型将负类样本错误地预测为正类;真负例表示模型正确地将负类样本预测为负类。

常见分类评估指标

1. 准确率(Accuracy)

准确率是最常用的评估指标之一,它表示模型预测正确的样本数占总样本数的比例。计算公式如下:

[ Accuracy = \frac{TP + TN}{TP + TN + FP + FN} ]

准确率可以直观地反映模型的整体性能,但在类别不平衡的情况下,准确率可能会产生误导。例如,在一个癌症诊断的任务中,癌症患者的比例可能非常低,如果模型将所有样本都预测为非癌症患者,准确率可能会很高,但实际上模型并没有真正识别出癌症患者。

2. 精确率(Precision)

精确率表示模型预测为正类的样本中,实际为正类的样本所占的比例。计算公式如下:

[ Precision = \frac{TP}{TP + FP} ]

精确率主要关注模型预测为正类的准确性,它可以帮助我们评估模型在预测正类时的可靠性。

3. 召回率(Recall)

召回率也称为灵敏度(Sensitivity)或真正例率(True Positive Rate, TPR),它表示实际为正类的样本中,被模型正确预测为正类的样本所占的比例。计算公式如下:

[ Recall = \frac{TP}{TP + FN} ]

召回率主要关注模型对正类样本的识别能力,它可以帮助我们评估模型在发现正类样本方面的性能。

4. F1 值(F1-Score)

F1 值是精确率和召回率的调和平均数,它综合考虑了精确率和召回率,能够更全面地评估模型的性能。计算公式如下:

[ F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall} ]

F1 值在精确率和召回率之间取得了平衡,当精确率和召回率都较高时,F1 值也会较高。

指标总结表格

指标名称 计算公式 含义
准确率(Accuracy) (\frac{TP + TN}{TP + TN + FP + FN}) 模型预测正确的样本数占总样本数的比例
精确率(Precision) (\frac{TP}{TP + FP}) 模型预测为正类的样本中,实际为正类的样本所占的比例
召回率(Recall) (\frac{TP}{TP + FN}) 实际为正类的样本中,被模型正确预测为正类的样本所占的比例
F1 值(F1-Score) (2 \times \frac{Precision \times Recall}{Precision + Recall}) 精确率和召回率的调和平均数

使用 PyTorch 计算分类指标

下面是一个使用 PyTorch 计算上述分类指标的示例代码:

  1. import torch
  2. from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
  3. # 模拟模型预测结果和真实标签
  4. y_true = torch.tensor([1, 0, 1, 0, 1])
  5. y_pred = torch.tensor([1, 1, 1, 0, 0])
  6. # 将张量转换为 numpy 数组
  7. y_true_np = y_true.numpy()
  8. y_pred_np = y_pred.numpy()
  9. # 计算准确率
  10. accuracy = accuracy_score(y_true_np, y_pred_np)
  11. print(f"Accuracy: {accuracy}")
  12. # 计算精确率
  13. precision = precision_score(y_true_np, y_pred_np)
  14. print(f"Precision: {precision}")
  15. # 计算召回率
  16. recall = recall_score(y_true_np, y_pred_np)
  17. print(f"Recall: {recall}")
  18. # 计算 F1 值
  19. f1 = f1_score(y_true_np, y_pred_np)
  20. print(f"F1-Score: {f1}")

在上述代码中,我们首先模拟了模型的预测结果和真实标签,然后使用 sklearn.metrics 中的函数计算了准确率、精确率、召回率和 F1 值。

总结

在分类任务中,不同的评估指标可以从不同角度反映模型的性能。准确率是最常用的指标,但在类别不平衡的情况下可能会产生误导;精确率关注模型预测为正类的准确性;召回率关注模型对正类样本的识别能力;F1 值综合考虑了精确率和召回率,能够更全面地评估模型的性能。在实际应用中,我们需要根据具体的任务需求选择合适的评估指标。同时,使用 PyTorch 结合 sklearn.metrics 可以方便地计算这些分类指标。