宏平均(Macro-averaging)、微平均(Micro-averaging)和权重平均(weight-averaging)的理解

很多博客关于宏平均,微平均,权重平均介绍了一大堆的公式,让人看了一头雾水,本文主要重点介绍怎么计算,从实例出发,相信大家在跟着算完一遍之后就知道这三个平均的意思了。

相关定义:

真正例(True Positive,TP):真实类别为正例,预测类别为正例。
假正例(False Positive,FP):真实类别为负例,预测类别为正例。
假负例(False Negative,FN):真实类别为正例,预测类别为负例。
真负例(True Negative,TN):真实类别为负例,预测类别为负例。
以正例为例计算:
召回率:TP / TP + FN
准确率:TP / TP + FP
那么F = [(1+β2)* 召回率 * 准确率] / (召回率 + 准确率)
而F1 就是β=1的情况,即F1 = (2* 召回率 * 准确率) / (召回率 + 准确率)

一个例子

这个例子是通过sklearn.metric.classification_report库自动计算出来的。micro avg:微平均,macro avg:宏平均,weighted avg :权重平均。之后就以这个例子进行计算。

               precision    recall  f1-score   support
            no     0.24      0.54      0.33      7535
           yes     0.73      0.42      0.53     22462
     micro avg     0.45      0.45      0.45     29997
     macro avg     0.48      0.48      0.43     29997
  weighted avg     0.61      0.45      0.48     29997

单个类别的f1的计算:

f1no = 2 * 0.24 * 0.54 / (0.24 + 0.54) = 0.3323 ≈ 0.33
f1yes = 2 * 0.42 * 0.73 / (0.73 + 0.42) = 0.5332 ≈ 0.53

微平均

TN = 7535 * 0.54 = 4069 -> 预测对的负例
TP = 22462 * 0.42 = 9343 -> 预测对的正例

  • 微平均其实就是所有类别的准确率。即(TP + TN) / (TP + FP + TN + FN)。那么有

    微平均 = (0.54 * 7535 + 0.42 * 22462) / (22462 + 7535 ) = 0.45 = micro avg

宏平均

  • 宏平均其实就是所有类别的f1平均

    宏平均 = (f1no + f1yes ) / 2 = 0.33 + 0.53 = 0.43 = macro avg

权重平均

  • 权重平均其实就是所有类别的f1加权平均

    权重平均 = (f1no * no样本占比 + f1yes * yes样本占比 ) / 2 = 0.33 * [7535 / (7535+22462)] + 0.53 * [22462 / (7535+22462)] = 0.48 = weighted avg

你可能感兴趣的:(NLP,python,python)