05 多分类任务中的评估指标:Binary Metrics 如何扩展到 Multi-class?
05 多分类任务中的评估指标:Binary Metrics 如何扩展到 Multi-class?
前面的 TP、FP、TN、FN 都是从二分类问题出发。
但是现实任务中经常存在多个类别。
例如:
猫 狗 鸟 马或者:
Class A Class B Class C Class D这类问题称为:
Multi-class Classification 多分类那么 Accuracy、Precision、Recall、F1 和 ROC-AUC 应该如何扩展?
一、多分类中的 Confusion Matrix
假设有三个类别:
Cat Dog Bird混淆矩阵可能如下:
| Actual \ Predicted | Cat | Dog | Bird |
|---|---|---|---|
| Cat | 50 | 3 | 2 |
| Dog | 4 | 40 | 6 |
| Bird | 1 | 5 | 39 |
对角线:
50 40 39表示预测正确。
非对角线表示模型发生了类别混淆。
例如:
Actual Dog Predicted Bird = 6说明有 6 个 Dog 被错误分类为 Bird。
二、多分类 Accuracy 很简单
Accuracy 仍然定义为:
Accuracy=Correct PredictionsAll PredictionsAccuracy=\frac{Correct\ Predictions}{All\ Predictions}Accuracy=AllPredictionsCorrectPredictions
在混淆矩阵中就是:
对角线元素之和 ÷ 全部元素之和例如:
Accuracy=50+40+39150=0.86Accuracy=\frac{50+40+39}{150}=0.86Accuracy=15050+40+39=0.86
即:
86%三、Precision 和 Recall 怎么扩展?
关键思想是:
一次选择一个类别,把它当作 Positive,其余所有类别合并成 Negative。
这叫:
One-vs-Rest OvR例如计算 Cat 的 Precision 和 Recall。
把:
Cat视为 Positive。
把:
Dog + Bird一起视为 Negative。
于是就重新回到了二分类问题。
四、Class-wise Precision
对于类别 i:
Precisioni=TPiTPi+FPiPrecision_i=\frac{TP_i}{TP_i+FP_i}Precisioni=TPi+FPiTPi
例如 Cat:
TP_cat = 真正是 Cat,并且预测为 Cat而:
FP_cat = 不是 Cat,但被预测为 Cat因此:
每一个类别都可以拥有自己的 Precision。
五、Class-wise Recall
对于类别 i:
Recalli=TPiTPi+FNiRecall_i=\frac{TP_i}{TP_i+FN_i}Recalli=TPi+FNiTPi
其中:
FN_i = 真正属于类别 i 但模型预测成其他类别因此:
每一个类别也可以拥有自己的 Recall。
六、Class-wise F1
对于类别 i:
F1i=2×Precisioni×RecalliPrecisioni+RecalliF1_i=2\times\frac{Precision_i\times Recall_i}{Precision_i+Recall_i}F1i=2×Precisioni+RecalliPrecisioni×Recalli
这样可以得到:
F1_cat F1_dog F1_bird然后问题来了:
如果有多个 F1,最终应该报告哪个?
这就引出了 Macro、Micro 和 Weighted Average。
七、Macro Average
Macro Average 的思路是:
每一个类别权重相同。
例如三个类别:
Macro Precision=Precision1+Precision2+Precision33Macro\ Precision=\frac{Precision_1+Precision_2+Precision_3}{3}MacroPrecision=3Precision1+Precision2+Precision3
Macro F1:
Macro F1=F11+F12+F133Macro\ F1=\frac{F1_1+F1_2+F1_3}{3}MacroF1=3F11+F12+F13
特点:
大类别和小类别同等重要因此如果:
类别不平衡 并且希望关注少数类别Macro F1 通常非常有价值。
八、Weighted Average
Weighted Average 按每个类别的样本数量加权。
设第 i 个类别样本数量为:
n_i总样本数量为:
N则:
Weighted F1=∑iniNF1iWeighted\ F1=\sum_i\frac{n_i}{N}F1_iWeightedF1=i∑NniF1i
特点:
样本多的类别权重更高因此它更接近数据的真实类别分布。
但是:
大类别可能掩盖小类别表现差的问题。
九、Micro Average
Micro Average 的思路是:
先把所有类别的 TP、FP、FN 汇总,再统一计算指标。
例如:
Micro Precision=∑iTPi∑iTPi+∑iFPiMicro\ Precision=\frac{\sum_iTP_i}{\sum_iTP_i+\sum_iFP_i}MicroPrecision=∑iTPi+∑iFPi∑iTPi
Micro Recall=∑iTPi∑iTPi+∑iFNiMicro\ Recall=\frac{\sum_iTP_i}{\sum_iTP_i+\sum_iFN_i}MicroRecall=∑iTPi+∑iFNi∑iTPi
Micro 更关注:
所有样本的总体预测表现对于单标签多分类任务,Micro Precision、Micro Recall 和 Micro F1 往往会非常接近整体 Accuracy。
十、Macro、Micro、Weighted 怎么选?
可以这样理解:
| Average | 核心思想 | 适合场景 |
|---|---|---|
| Macro | 每个类别同等重要 | 类别不平衡且关心小类别 |
| Micro | 每个样本同等重要 | 关注整体样本表现 |
| Weighted | 按类别数量加权 | 希望反映真实类别分布 |
如果数据:
Class A = 9000 Class B = 900 Class C = 100那么:
Weighted F1可能主要由 Class A 决定。
而:
Macro F1会让 Class C 与 Class A 拥有相同权重。
所以当少数类别很重要时:
Macro F1 通常比 Weighted F1 更能暴露问题。
十一、多分类 ROC 怎么做?
ROC 本来是:
Positive vs Negative多分类没有单一 Positive。
因此常见方式仍然是:
One-vs-Rest例如:
Cat vs Non-Cat Dog vs Non-Dog Bird vs Non-Bird分别计算 ROC Curve 和 AUC。
于是得到:
AUC_cat AUC_dog AUC_bird然后再进行:
Macro-average AUC Micro-average AUC Weighted-average AUC十二、One-vs-One
另一种方式是:
One-vs-One OvO例如三个类别:
Cat vs Dog Cat vs Bird Dog vs Bird分别比较类别对之间的区分能力。
OvO 在分析:
模型究竟容易混淆哪些类别时非常有用。
十三、Top-k Accuracy
对于类别很多的任务,还可能使用:
Top-k Accuracy例如 Image Classification 中:
Top-1 Accuracy Top-5 AccuracyTop-5 Accuracy 表示:
真实类别是否出现在模型概率最高的 5 个类别中。
这在类别数量非常多时比单纯 Top-1 更有解释性。
十四、不要只报告一个平均值
对于多分类问题,推荐至少查看:
Confusion Matrix Per-class Precision Per-class Recall Per-class F1 Macro F1 Weighted F1原因是:
一个总体平均分很容易掩盖某些类别严重失效的问题。
十五、一个典型报告
多分类模型的评估报告可以包含:
Accuracy: 0.91 Macro Precision: 0.86 Macro Recall: 0.84 Macro F1: 0.85 Weighted Precision: 0.92 Weighted Recall: 0.91 Weighted F1: 0.91如果:
Weighted F1 很高 Macro F1 明显较低往往意味着:
模型在大类别上表现很好,但是在小类别上表现较差。
十六、总结
多分类评估并没有发明完全不同的指标。
核心思想仍然是:
把每一个类别轮流视为 Positive 其余类别视为 Negative然后计算:
Precision Recall F1 ROC-AUC最终再通过:
Macro Micro Weighted进行汇总。
理解这一点之后,多分类指标就会非常自然。