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

  统计/机器学习 模型验证    浏览次数:31116        分享
7

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


 

FTD   2017-10-18 11:10



   2个回答 
36

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面试题库 DS面经

高代兄   2017-12-19 11:12

言简意赅 - BenChur   2019-01-11 17:03
非常清楚,太赞了 - Solomon   2019-05-22 13:12
3

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

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


SofaSofa数据科学社区DS面试题库 DS面经

Robin峰   2017-12-20 16:07



  相关讨论

K折交叉验证是否有意义?

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

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

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

回归问题中的stratified cross validation?

k-fold cross validation的k怎么选

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

十折交叉验证

测试集和验证集的区别?

交叉验证是如何进行的?

  随便看看

医学统计里的c-index或者c-statistic是什么意思?

单一变量下的异常检测该怎么做?

二元分类问题中经常提到的TP,TN,FN,FP都是什么意思?

怎么理解库克距离(Cook's distance)?

sklearn中的predict_proba方法的返回值的意义