一文掌握分类模型评估指标

本文详细介绍了混淆矩阵及其衍生的各类评估指标,帮助优化分类模型性能。

原文标题:一文读懂分类模型评估指标

原文作者:数据派THU

冷月清谈:

本文介绍了分类模型评估中常用的指标,包括混淆矩阵、准确度、精确度、召回率和F1分数。混淆矩阵用于展示模型对样本的分类情况,分为四类:真正例(TP)、假负例(FN)、假正例(FP)和真负例(TN)。准确度是指正确预测的样本所占的比例;精确度衡量的是所有预测为正的样本中,实际为正的比例;召回率关注模型捕获所有正例的能力。而F1分数则提供了一个综合的评估,平衡了精确率和召回率。整体而言,理解这些指标能有效帮助我们评估和优化模型的性能。

怜星夜思:

1、混淆矩阵中最重要的部分是什么?
2、如何选择精确度与召回率的平衡点?
3、你们通常是如何评估自己的模型表现的?

原文内容

图片
来源:DeepHub IMBA

本文约1200字,建议阅读5分钟

本文将逐步分解混淆矩阵,准确性,精度,召回率和F1分数。


模型评估是深度学习和机器学习中非常重要的一部分,用于衡量模型的性能和效果。
图片

混淆矩阵

混淆矩阵是在分类问题中用于评估模型性能的表格,它展示了模型对样本的分类情况。混淆矩阵的行表示实际类别,列表示预测类别。对于二分类问题,混淆矩阵的结构如下:
图片
  • True Positive (TP): 实际为正例,模型预测为正例的样本数,模型正确识别正面实例的能力。更高的TP通常是可取的

  • False Negative (FN): 实际为正例,模型预测为负例的样本数,根据应用程序的不同,这可能是关键的(例如,未能检测到安全威胁)。

  • False Positive (FP): 实际为负例,模型预测为正例的样本数,强调模型在不应该预测为正的情况下预测为正的情况,这可能会产生取决于应用的后果(例如,医疗诊断中不必要的治疗)

  • True Negative (TN): 实际为负例,模型预测为负例的样本数,反映模型正确识别否定实例的能力。通常需要更高的TN


初学者看起来很乱,其实这样理解就非常简单了,后面的Negative/Positive 为模型预测值,前面的True/False 为模型预测是否正确,比如True Negative,代表,模型预测是Negative并且与实际的值对比是True 也就是预测正确的,这样就好理解了。以下是一个简单的混淆矩阵:
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# Example predictions and true labels
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1, 1, 1]
# Create a confusion matrix
cm = confusion_matrix(y_true, y_pred)
# Visualize the blueprint
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=["Predicted 0", "Predicted 1"], yticklabels=["Actual 0", "Actual 1"])
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.show()


当你想强调正确的预测和整体准确性时,使用TP和TN。当你想了解你的模型所犯的错误类型时,使用FP和FN。例如,在误报成本很高的应用程序中,最小化误报可能是至关重要的。
比如一个垃圾邮件分类器。混淆矩阵可以理解正确识别了多少垃圾邮件,错误标记了多少非垃圾邮件。
基于混淆矩阵,可以计算许多其他评估指标,例如准确度、精确度、召回率和F1分数。

Accuracy

图片
根据我们上面的总结,计算的是能够正确预测的的比例,分子是TP和TN都是True,也就是模型预测对了的总数

Precision

图片
可以看到公式,他计算的是Positive 的占比,也就是说数据中所有Positive的,正确预测对了有多少,所以精确度Precision又被称作查准率
在误报有重大后果或成本的情况下,这是至关重要的。例如在医学诊断模型中,精确度确保只对真正需要治疗的人进行治疗。

Recall

召回率,也称为灵敏度或真阳性率,关注模型捕获所有正类实例的能力。
图片
从公式中可以看到,它主要是计算模型捕获了多少实际的Positive,也就是Positive的占比,所以Recall又被称作查全率。

F1 Score

F1分数是一个在精确度和召回率之间取得平衡的指标,为模型的性能提供了一个全面的衡量标准。它是查准率和查全率的调和平均值,计算公式为:
图片
F1分数很重要,因为它提供了精确率和召回率之间的折衷。当你想在准确率和召回率之间找到平衡时,或者说针对一般的应用可以使用F1 Score。

总结

本文对混淆矩阵、准度、精度、召回率和F1分数进行了详细的介绍,使用这些指标可以很好地评估和增强模型的性能。
作者:Rohit Saroj

编辑:黄继彦


选择平衡点通常取决于具体的应用背景。例如,如果是做网络安全监测,可能更倾向于召回率,确保捕捉到所有的攻击;而做金融欺诈检测时,为了降低误报,可能会更看重精确度。

听说F1分数可以用来找到二者的平衡,我觉得这确实是一个不错的选择!但平衡点的选择还得考虑实际的业务需求,比如容忍误报的程度和漏报的成本。

其实很多时候可以通过精确度与召回率的权重组合来反映我们的偏好,比如把某一方的权重调高,导致F1分数向另一方倾斜,这样可以更好地符合业务需求。

我主要是用混淆矩阵进行初步评估,然后结合精确度和召回率,特定应用时还会特别关注F1分数,尤其是在数据不平衡的情况下,这些数字能比较直观地反映出模型表现。

通常我除了看这些指标外,还会用一些可视化工具,比如ROC曲线来帮助理解模型的真实表现,尤其是在分类问题上,这样的对比还能带来不少启发。

我用的方式比较偏向操作性,会定期对比我的模型在实际应用中的表现,关注具体的误报和漏报案例,毕竟实际上跑出来的结果才是检验的关键!

我认为混淆矩阵中TP(真正例)绝对是最重要的,因为这直接影响到我们模型是否能够正确识别出需要处理的目标。如果这个值不高,整个模型的实用性就打折扣了。

混淆矩阵的TN(真负例)同样重要,特别是针对一些安全应用,能够正确识别非目标非常关键。错误识别可能会导致很多的误判,影响系统的可靠性。如果TN高,说明模型对负例的处理很到位。

我觉得一般情况下TP和FP其实更有意思,毕竟我们总是希望模型能准确捕捉到正例,但误报情况也不能忽视。有时候,错误将负例标记为正例的成本是巨大的,像医疗诊断那种场合。