Recall
每个真实class里的case里,有多少是真的。(和per-class accuracy每个class的accuracy是一样的)
Example
二分类里 recall 不等于 overall accuracy,但可以理解成“某一个 class 内部的 accuracy”。
假设把 1 当 positive class:
| 预测 1 | 预测 0 | |
|---|---|---|
| 真实 1 | TP | FN |
| 真实 0 | FP | TN |
Recall for class 1
所有真实为 1 的样本里,有多少被正确预测成 1。
所以它是 class 1 里面的 accuracy,不是全体样本的 accuracy。
Overall accuracy
整体 accuracy 是所有样本里,有多少预测对了。
Balanced accuracy
每个class的accuracy(也就是recall),做个平均
为什么它叫 accuracy,但其实是 recall?
普通 accuracy 是:
它是按 sample 平均的,所以大类样本多,大类的影响就大。
而 balanced accuracy 想解决这个问题,所以它改成:
先看每个 class 自己内部预测对了多少,再对 class 平均。
Precision
在预测出来这个class的里面,有多少是真的
F1
combine了precision和recall
Macro-F1
加入每个class都算了一个F1, 那就平均一下。
它比overall accuracy要好很多,因为如果某一类占了很多,accuracy就会很好,但如果看一些class,就不一定那么好。这个时候Macro-F1就可以reflect到底好不好。
Macro-F1 对每个类别一视同仁,不管这个类别样本多还是少。
如果模型只在大类上表现好,但在小类上表现差,普通 accuracy 可能还不错,但 Macro-F1 会明显降低。
Example
假设数据是这样的:
| True class | 总数 | 预测对 |
|---|---|---|
| Negative | 900 | 850 |
| Positive | 100 | 40 |
普通 accuracy 是:
看起来有 89%,似乎不错。
但是 balanced accuracy 是:
也就是:
这里:
- (850/900) 是 negative class 的 recall
- (40/100) 是 positive class 的 recall
所以 balanced accuracy 会暴露出模型对 positive class 表现很差的问题。
Per-class Precision
对某个 class (c),per-class precision 是:
它回答的问题是:
模型所有预测成 class (c) 的样本里,有多少真的属于 class (c)?
也可以理解成:
我预测出来的这个 class 有多“纯”?
所以 precision 关注的是 预测出来的结果有多少是真的。
还是用 Rabbit 举例:
真实有 100 个 Rabbit。模型找出了 40 个,所以 recall 是:
但如果模型一共预测了 80 个 Rabbit,其中只有 40 个是真的,那么:
也就是说,模型预测为 Rabbit 的样本里,只有一半是真的 Rabbit。
Recall 和 Precision 的区别
| 指标 | 分母是谁 | 问的问题 | 关注点 |
|---|---|---|---|
| Per-class recall | 所有真实是 class (c) 的样本 | 真实的 (c) 里,我找到了多少? | 漏掉多少 |
| Per-class precision | 所有预测成 class (c) 的样本 | 我预测为 (c) 的里面,有多少是真的? | 预测有多纯 |
简单记法:
- Recall:真实有的,我找回来了多少?
- Precision:我说有的,到底有多少是真的?
Macro-F1 和 Balanced Accuracy 的区别
| 指标 | 怎么算 | 关注什么 |
|---|---|---|
| Balanced accuracy | 每个 class 的 recall 平均 | 每类有没有被找出来 |
| Macro-F1 | 每个 class 的 F1 平均 | 每类的 precision 和 recall 是否都好 |
所以:
- 如果你主要关心模型有没有识别出每个类别,可以看 balanced accuracy。
- 如果你同时关心模型对每个类别的 recall 和 precision,可以看 Macro-F1。
在类别不平衡的任务中,Macro-F1 通常比普通 accuracy 更能反映模型是否真的学到了 minority class。