家喻户晓,F1-score 是通过混同矩阵算进去的
<img src=”https://math.jianshu.com/math?formula=%5Ctext%20%7Bprecision%7D%20%3D%5Cfrac%7B%5Ctext%20%7BTP%7D%7D%7B%5Ctext%20%7BTP%7D%2B%5Ctext%20%7BFP%7D%7D%5C%5C%20%5Ctext%20%7Brecall%7D%20%3D%5Cfrac%7B%5Ctext%20%7BTP%7D%7D%7B%5Ctext%20%7BTP%7D%2B%5Ctext%20%7BFN%7D%7D” alt=”\text {precision} =\frac{\text {TP}}{\text {TP}+\text {FP}}\ \text {recall} =\frac{\text {TP}}{\text {TP}+\text {FN}}” />
TP 代表预测正类,预测正确,FN 代表预测负类, 然而预测谬误了.
这样就能计算某个类别的 F1-score 了. 然而其实 F1-score 还能够应用 TP,FN 等定义来计算, 这两个公式是一样的.
F1 分数是一个按类计算的指标,这意味着如果你想计算一个蕴含多个类的数据集的总体 F1 分数,你须要以某种形式进行聚合。宏观和宏观 F1 分数是进行这种聚合的两种形式。
当计算多类 (这里包含两类) 的 F1-score 时个别又分为微 F1 和宏 F1, 也就是 Micro 和 Macro.
Macro F1
Class | TP | FP | FN | F1 score |
---|---|---|---|---|
0 | 10 | 2 | 3 | 0.8 |
1 | 20 | 10 | 12 | 0.6 |
2 | 5 | 1 | 1 | 0.8 |
Sum | 35 | 13 | 16 |
比方下面的三类, 计算失去别离的 F1, 而后多类的 F1-score 的如果应用 macro 形式计算间接计算平均值即可。
对于 class 0, 首先准确率为 10/12=0.83, 查全率为 10/13=0.769, 则 F1 为 1.27654/1.699=0.798, 取 0.8, 同理算出所有类别的 F1. 则 Macro F1 为Macro F1 score = (0.8+0.6+0.8)/3 = 0.73
Micro F1
Micro F1 分数是应用真阳性(TP)、假阳性(FP)和假阴性(FN)的总数来计算,而不是针对每个类别独自计算。
Class | TP | FP | FN | F1 score |
---|---|---|---|---|
0 | 10 | 2 | 3 | 0.8 |
1 | 20 | 10 | 12 | 0.6 |
2 | 5 | 1 | 1 | 0.8 |
Sum | 35 | 13 | 16 |
相似下面的表格, 计算 Micro F1 的话, 间接套公式,Micro F1 score = 35 / (35 + 0.5 \* (13 + 16)) = 0.71
, 相当于把三类的数据当作一样的的了
FAQ
-
对于不均衡的数据集,Micro 还是 Macro F1 得分更好
micro F1-score 在不均衡数据集上的体现比 macro F1 差。这是因为 micro F1 对 每个观测值 (样本) 都具备等同的重要性,而 macro F1 是对 每个类别 都具备等同重要性。
也就是当某个类别中数据特地多, 其余类别数据比拟少时,Micro F1 会更多思考数据特地多的类. 最终的分数覆盖了多数的体现,放大了大多数的体现。
-
为什么 scikit 学习分类报告中没有 Micro 平均值
当指标是单标签分类时,宏观均匀 F1 分数在分类报告中显示为 accuracy。
这样做是因为在这种状况下,宏观均匀 F1 分数返回的值与 accuracy 雷同
3.micro 和 macro F1 有什么区别
micro 和 macro F1 分数之间的要害区别在于它们在不均衡数据集上的行为。当类不均衡时,micro F1 分数通常不会返回模型性能的主观衡量标准,而 macro F1 分数能够这样做。
总结
如果你有一个不均衡的数据集,那么你应该应用 macroF1 分数,因为即便类是偏斜的,这依然会反映实在的模型性能。然而,如果你有一个均衡的数据集,那么能够思考 microF1 分数,特地是如果与最终用户交换后果很重要的话。
参考资料
- Micro vs Macro F1 score, what’s the difference? (stephenallwright.com)
本文由 mdnice 多平台公布