机器学习中三个是基础的指标:准确率 (Accuracy)、精确率 (Precision) 和 召回率 (Recall)
我每天都会大量地使用AI,但对一些AI的基础概念比较模糊。为了更好地用好AI,近期在对AI的一些基础知识稍微作了一些较深入的理解和学习,借这个平台,作一些记录,顺便也分享给大家,欢迎大家一起交流。
今天,我们就来来详细解析机器学习中这三个最基础且重要的评估指标:准确率 (Accuracy)、精确率 (Precision) 和 召回率 (Recall)。
理解它们的关键在于区分看待预测结果的不同视角。我们先从一个最经典的例子——疾病检测入手。
假设我们有一个用于诊断某种疾病的模型,现在我们在一个测试集上运行它,结果可以用一个混淆矩阵 (Confusion Matrix) 来概括:
维度 | 实际患病 (Positive) | 实际健康 (Negative) |
---|---|---|
预测患病 (Positive) | 有病 (True Positive, TP) | 误诊 (False Positive, FP) |
预测健康 (Negative) | 漏诊 (False Negative, FN) | 健康 (True Negative, TN) |
1. 准确率 (Accuracy)
- 定义:所有预测正确的样本数占总样本数的比例。
- 公式:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
- 理解:顾名思义,它衡量的是模型整体的“正确率”。它是一个非常直观的宏观指标。
- 优点与局限:
- 优点:在各类别分布均衡(比如健康人和病人数量差不多)时,它是一个很好的综合性指标。
- 缺点:在类别不平衡的数据集中,准确率会严重失真。
- 例子:假设一个城市有1000人,其中只有10人(1%)真正患病。如果一个模型非常“懒”,简单地把所有1000人都预测为健康(相当于漏诊10人),那么它的混淆矩阵是:
- TP=0, FP=0, FN=10, TN=990
- Accuracy = (0 + 990) / 1000 = 99%
- 这个99%的准确率看起来非常高,但实际上这个模型连一个病人都没找出来!它是一个完全无用的模型。因此,在类似疾病检测、欺诈识别这种类别极不平衡的场景下,准确率基本没有参考价值,必须看精确率和召回率。
- 例子:假设一个城市有1000人,其中只有10人(1%)真正患病。如果一个模型非常“懒”,简单地把所有1000人都预测为健康(相当于漏诊10人),那么它的混淆矩阵是:
2. 精确率 (Precision) - 又称“查准率”
- 定义:在所有被模型预测为患病(Positive) 的人中,有多少是真正患病的。
- 公式:
Precision = TP / (TP + FP)
- 理解:它关注的是预测结果的质量。一个高精确率的模型意味着它非常“精准”,它说某人有病,那么此人很可能真的有病。它惩罚的是“误诊”(False Positive),也就是 “宁纵勿枉” 。
- 应用场景:当误判成本(False Positive)很高时,我们需要高精确率。
- 例子:
- 垃圾邮件检测:如果模型将一封重要工作邮件误判为垃圾邮件(FP),用户可能错过重要信息,这个代价很高。因此我们希望模型非常确定是垃圾邮件时才把它放进垃圾箱,即追求高精确率。
- 推荐系统:给用户推荐的内容一定要是他可能喜欢的(TP),而不是他不喜欢的(FP)。推荐不相关的内容会损害用户体验。
- 例子:
3. 召回率 (Recall) - 又称“查全率”
- 定义:在所有真正患病(Actual Positive) 的人中,有多少被模型成功预测了出来。
- 公式:
Recall = TP / (TP + FN)
- 理解:它关注的是模型发现正例的能力。一个高召回率的模型意味着“宁可错杀一千,不可放过一个”,它能把绝大多数病人都找出来。它惩罚的是“漏检”(False Negative)。
- 应用场景:当漏检成本(False Negative)很高时,我们需要高召回率。
- 例子:
- 疾病检测:如果一个癌症患者被模型误判为健康(FN),他可能因此错过最佳治疗时机,这个代价是致命的。因此我们必须尽可能地把所有潜在病人都找出来复查,即追求高召回率(即使这样会误抓一些健康人FP)。
- 欺诈交易识别:放过一个欺诈交易(FN)会导致直接的经济损失,因此必须尽可能召回所有可疑交易,交给人工审核。
- 例子:
核心区别与总结
指标 | 公式 | 关注点 | 核心问题 | 应用场景 |
---|---|---|---|---|
准确率 (Accuracy) | (TP+TN)/(TP+TN+FP+FN) | 整体正确性 | “模型猜对的比例是多少?” | 类别平衡的通用任务 |
精确率 (Precision) | TP/(TP+FP) | 预测正例的准确性 | “模型说某人有病,这话有多可信?” | 误诊成本高(垃圾邮件、推荐) |
召回率 (Recall) | TP/(TP+FN) | 捕捉正例的全面性 | “真正有病的人里,模型找出了多少?” | 漏检成本高(疾病、欺诈) |
两者的权衡 (Trade-off)
精确率和召回率通常是矛盾的。提高一个,往往会降低另一个。
- 如果你想提高召回率(抓住更多坏人),你就需要放宽预测标准,这样你就能抓住更多真正的坏人(TP↑),但同时也会把更多好人误判为坏人(FP↑)。FP的增加会导致精确率下降。
- 如果你想提高精确率(确保抓的都是坏人),你就需要收紧预测标准,这样你抓的人里坏人的比例就很高(FP↓),但一些隐藏得好的坏人可能就会被漏掉(FN↑)。FN的增加会导致召回率下降。
如何权衡取决于你的业务需求:
- 疾病筛查:优先保证高召回率(宁可误抓,不可放过)。
- 垃圾邮件过滤:优先保证高精确率(宁可放过,不可误杀)。
为了综合评估这两个指标,我们引入了 F1 Score,它是精确率和召回率的调和平均数,旨在找到一个平衡点。
F1 Score = 2 * (Precision * Recall) / (Precision + Recall)
好了,今天的分享就到此结束了,我的理解和表达清楚吗?欢迎大家留言讨论。