micro和macro F1 score分别是什么意思?

  统计/机器学习 模型验证    浏览次数: 5571
5

micro和macro F1 score分别是什么意思?谢谢各位大神!


 

FTD   2017-10-18 11:10



   2个回答 
19

F1 score是一个用来评价二元分类器的度量。先回顾一下它的计算公式:

$$F_1=\frac{2}{\frac{1}{\text{recall}} + \frac{1}{\text{precision}}}=2\frac{\text{recall}\times \text{precision}}{\text{recall} + \text{precision}}$$


F1是针对二元分类的,那对于多元分类器,有没有类似F1 score的度量方法呢?有的,而且还不止一种,常用的有两种,这就是题主所问的两种,一种叫做macro-F1,另一种叫做micro-F1。


macro-F1

假设对于一个多分类问题,有三个类,分别记为1、2、3,

$TP_i$是指分类$i$的True Positive;

$FP_i$是指分类$i$的False Positive;

$TN_i$是指分类$i$的True Negative;

$FN_i$是指分类$i$的False Negative。

接下来,我们分别计算每个类的精度(precision)

$$\text{precision}_{i}=\frac{TP_i}{TP_i+FP_i}$$

macro精度就是所有精度的均值

$$\text{precision}_{ma}=\frac{\text{precision}_{1}+\text{precision}_{2}+\text{precision}_{3}}{3}$$

类似地,我们分别计算每个类的召回(recall)

$$\text{recall}_{i}=\frac{TP_i}{TP_i+FN_i}$$

macro召回就是所有召回的均值

$$\text{recall}_{ma}=\frac{\text{recall}_{1}+\text{recall}_{2}+\text{recall}_{3}}{3}$$

最后macro-F1的计算公式为

$$F_{1, ma}=2\frac{\text{recall}_{ma}\times \text{precision}_{ma}}{\text{recall}_{ma} + \text{precision}_{ma}}$$


micro-F1

假设对于一个多分类问题,有三个类,分别记为1、2、3,

$TP_i$是指分类$i$的True Positive;

$FP_i$是指分类$i$的False Positive;

$TN_i$是指分类$i$的True Negative;

$FN_i$是指分类$i$的False Negative。

接下来,我们来算micro精度(precision)

$$\text{precision}_{mi}=\frac{TP_1+TP_2+TP_3}{TP_1+FP_1+TP_2+FP_2+TP_3+FP_3}$$

以及micro召回(recall)

$$\text{recall}_{mi}=\frac{TP_1+TP_2+TP_3}{TP_1+FN_1+TP_2+FN_2+TP_3+FN_3}$$

最后micro-F1的计算公式为

$$F_{1, mi}=2\frac{\text{recall}_{mi}\times \text{precision}_{mi}}{\text{recall}_{mi} + \text{precision}_{mi}}$$


如果这个数据集中各个类的分布不平衡的话,更建议使用mirco-F1,因为macro没有考虑到各个类别的样本大小。


SofaSofa数据科学社区 DS面经 问答 实战

高代兄   2017-12-19 11:12

1

F1是针对二元的,对于多元的F1,我们就要变着法子求个均值F1,macro和micro就是不同的求均值的方式。

至于具体怎么求,上面已经回答的很清楚了。


SofaSofa数据科学社区 DS面经 问答 实战

Robin峰   2017-12-20 16:07



  相关主题

如果我用交叉验证,还是否需要单独分出测试集?   1回答

如何在保持查全率不变的情况下提高查准率?   1回答

精度-召回曲线的起点和终点是什么?   2回答

测试集和验证集的区别?   4回答

k-fold cross validation的k怎么选   3回答

Stratified k-fold cross validation(分层交叉验证)   1回答

交叉验证是如何进行的?   1回答

回归问题中的stratified cross validation?   2回答

十折交叉验证   1回答

python里怎么求多元分类的F1 score?   1回答

python里怎么计算一个数组的熵(entropy)?   1回答

什么是混淆矩阵(confusion matrix)   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!