分类任务怎么评估?

分类任务怎么评估?Accuracy、Precision、Recall 和 F1 怎么选?
做机器学习的人,十个有八个第一次被问"你的分类器效果怎么样"时,脑子里蹦出来的答案都是 Accuracy。毕竟这是最直觉的指标——猜对几个除以总数,听着就很合理。
我当年也是这样。第一次做垃圾邮件分类,Accuracy 95%,兴冲冲给老板汇报,结果模型上线第一天,用户的重要邮件全进了垃圾箱。
问题出在哪?评估指标选错了。
混淆矩阵:所有分类指标的"地基"
先记住一个概念——混淆矩阵。
它本质上是一张 2×2 的表格,记录了模型"猜对了什么、猜错了什么"。
把样本分成两堆:真正的正例(Positive)和负例(Negative)。模型的任务是判断每个样本属于哪一堆。所以结果只有四种可能:
猜对了:真阳性(TP)—— 真的垃圾邮件,你识别出来了;真阴性(TN)—— 正常邮件,你没动它。
猜错了:假阳性(FP)—— 误报,正常邮件被你当成垃圾了;假阴性(FN)—— 漏报,垃圾邮件从你眼皮底下溜走了。
记 P 是 Positive(正类),N 是 Negative(负类);T 是 True(对了),F 是 False(错了)。记住这个对应关系就行。

Accuracy 很好看,但它会骗你
Accuracy 的公式很简单: Accuracy = (TP + TN) / 总样本数。
你猜对了几个,除以总数就是准确率。95% 的 Accuracy 听起来很美对吧?
但问题来了。
假设你做的是信用卡欺诈检测,数据集里有 99% 是正常交易,只有 1% 是欺诈。你训练了一个模型,它学聪明了——把所有交易都预测为"正常"。
结果呢?Accuracy = 99%。
但这个模型有什么用?它一个欺诈都没抓到。
这就是类别不均衡的陷阱。当正负例比例严重倾斜时,模型只需要"预测多数类"就能躺赢 Accuracy。
我再给你举个例子。
考试有 100 道题,其中 80 道是单选题选 C 的。你全选 C,能得 20 分。这时候 Accuracy = 20%,它诚实地告诉你"你不行"。
但如果 80 道是选 C,20 道选其他,你全选 C 能得 80 分。看起来分数很高,实际上你什么都不会。
类别越不均衡,Accuracy 越容易"虚胖"。

Precision 和 Recall:一个怕误报,一个怕漏报
光看 Accuracy 不够,你得知道模型在"猜正例"这件事上到底有多准。
这就是 Precision 和 Recall 要解决的问题。
Precision(精确率) 问的是:你说这是正例,真的假的?
公式:Precision = TP / (TP + FP)。
所有被你预测为正例的样本里,有多少是真正的正例?
这个指标在乎的是"误报成本"。垃圾邮件过滤用 Precision 优先——你宁可放过一封垃圾,也不愿意把重要邮件误判。用户收不到老板邮件,比收到一条垃圾邮件严重多了。
Recall(召回率) 问的是:真正的正例,你找到了多少?
公式:Recall = TP / (TP + FN)。
所有真实正例里,有多少被你找出来了?
这个指标在乎的是"漏报成本"。癌症筛查用 Recall 优先——你宁可多跑几趟医院复查,也不想错过早期症状。漏诊的代价太高了。
打个比方你就明白了。
Precision 像精准狙击。你瞄准一个目标,弹无虚发,但可能漏掉其他目标。
Recall 像地毯式轰炸。你把整片区域都炸一遍,漏网之鱼很少,但误伤肯定有。

F1-score:Precision 和 Recall 的调和平均
有些场景,误报和漏报都挺痛的。比如网络入侵检测——误报太多,安全团队疲于应付;漏报太多,真实攻击溜进来。
这时候需要一个综合指标,兼顾 Precision 和 Recall。
这就是 F1-score。
公式:F1 = 2 × (Precision × Recall) / (Precision + Recall)。
它不是简单平均,而是调和平均。
假设 Precision = 0.8,Recall = 0.4。算术平均是 0.6,调和平均是多少?
F1 = 2 × (0.8 × 0.4) / (0.8 + 0.4) = 0.64 / 1.2 = 0.53。
看到了吗?Recall 偏低直接把 F1 拉下来了。
调和平均的特点是:只要有一个指标拖后腿,整体分数就好看不了。这叫"短板效应"。
类比一下木桶效应:木桶能装多少水,取决于最短的那块板。F1 就是要逼着你补短板,别瘸腿。
但 F1 也有局限。它假设 Precision 和 Recall 同等重要。现实业务里往往权重不同——这时候可以换用 Fβ 分数,β > 1 偏向 Recall,β < 1 偏向 Precision。常见的 F2 就是 Recall 权重更高的版本。

多分类:用宏平均还是微平均?
二分类说完了,现实任务往往是多分类。
猫狗鸟马,疾病分级,商品类目——每个类别都可能有自己的正例和负例。
怎么算指标?
思路是:先把多分类拆成"多个二分类"——对每个类别单独计算 TP、FP、FN,然后再想办法合并。
合并方式不同,得到的结果也不同。
宏平均(Macro):先对每个类别算出 Precision、Recall、F1,然后取算术平均。每个类别一视同仁,不管样本多少。
微平均(Micro):把所有类别的 TP、FP、FN 加总在一起,再算一个总的 Precision、Recall、F1。这等价于整体 Accuracy,样本多的类别说话权重大。
加权平均(Weighted):按每个类别的样本数加权平均。大类的影响更大。
怎么选?
记住一个原则:类别不均衡看宏平均,类别均衡看微平均。
一个三分类任务,类别 A 有 10000 条样本,类别 B 有 100 条,类别 C 有 100 条。
宏平均会说:类别 A 的性能很重要,类别 B 和 C 也同样重要,三个一样权重的平均。
微平均会说:类别 A 有 10000 条,它的表现应该主导整体指标。
哪个更合理?取决于你的业务目标。
如果 B 和 C 是"小众但关键"的类别(比如 rare disease),你肯定不希望它们被大类稀释。这时候宏平均更合适。
如果 A、B、C 就是普通的分类任务,没有特殊权重,那微平均更接近直觉。

选型指南:对号入座,不再纠结
说了这么多,来点实用的。
下次面对分类任务,直接问自己三个问题:
问题一:是二分类还是多分类?
多分类跳到问题二。二分类直接看问题三。
问题二:类别均衡吗?
均衡的话,Accuracy 就够用。不均衡的话,用宏平均 F1。
问题三:误报和漏报,哪个更痛?
- 误报更痛(Precision 优先):比如推荐系统——你给用户推了不相关的内容,用户体验下降。
- 漏报更痛(Recall 优先):比如 fraud detection——欺诈没拦住,直接损失真金白银。
- 两者都痛:看 F1。
把选指标想象成"点菜"。先确定主菜——Accuracy、Precision 还是 Recall。再决定要不要加汤——要不要用 F1 调和一下。
一顿饭吃得好不好,不能只看一道菜的评分。

Accuracy、Precision、Recall、F1——这四个指标你搞清楚了。
模型评测不只有分类任务。生成任务怎么评估?BLEU、ROUGE、BERTScore 靠谱吗?
这是下一个话题了。
