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

模型评估是深度学习和机器学习中非常重要的一部分,用于衡量模型的性能和效果。本文将逐步分解混淆矩阵,准确性,精度,召回率和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分数进行了详细的介绍,使用这些指标可以很好地评估和增强模型的性能。

https://avoid.overfit.cn/post/90571a2233f64dbc80c6732f3e817d6c

作者:Rohit Saroj

相关推荐
weixin_44401293几秒前
CSS定位如何实现模态框垂直居中_使用负边距或transform
jvm·数据库·python
端平入洛3 分钟前
大模型 chat 接口的标准消息格式
人工智能
MediaTea4 分钟前
人工智能通识课:机器学习之无监督学习
人工智能·深度学习·学习·机器学习
2301_783848655 分钟前
Go 中实现高效图最大团划分的实践与边界分析
jvm·数据库·python
2401_884454156 分钟前
C#怎么实现Socket心跳包 C#如何在TCP Socket通信中设计心跳机制检测连接状态【网络】
jvm·数据库·python
数字会议深科技7 分钟前
政务表决会议升级方案解析|多形态大型表决系统融合方案科普
大数据·人工智能·政务·无纸化·会议厂商·ai会议生态服务商·表决系统
码力斜杠哥10 分钟前
Rust初习录(6)Rust的 if 玩法
开发语言·python·rust
敲敲千反田14 分钟前
Spring AI
java·人工智能·spring
Jetev18 分钟前
不同品牌SSD对HTML函数工具加载速度影响大吗_存储测试汇总【汇总】
jvm·数据库·python
SelectDB技术团队18 分钟前
时间序列近邻关联性能实测:Doris ASOF JOIN 领先 ClickHouse、DuckDB
数据库·人工智能·selectdb