一文解释Micro-F1, Macro-F1,Weighted-F1

本文通过实例详细介绍了多分类任务中的micro-f1、macro-f1和weighted-f1三种评估指标的计算方法及其区别。并解释了为何在sklearn中micro-f1与accuracy等指标等价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

  本文用通俗易懂的形式解释多分类任务中的micro-f1,macro-f1,weighted-f1。前提需要知道基本的概念如精确率、召回率。

F1

  我们使用一个分类例子来解释F1。假设我们有一个图像分类模型,模型可以将图片分类为飞机、船和汽车,这是个三分类任务。现在我们使用这个模型对十张图片进行分类,分类结果如下:
分类结果
  根据上面的预测结果可以得到下表。
混淆矩阵
  根据上表可以计算每个类别的TP,FP,FN,精确率,召回率,F1:
在这里插入图片描述
  单个类的指标无法反映模型的整体性能,我们需要综合每个类别的指标,接下来我们将讨论如何综合每个类别的指标来整体反映模型的性能。

macro -f1

  macro-f1 是对每类F1分数计算算术平均值,该方法平等地对待所有类,而不考虑不同类别的重要性。
macro-F1

weighted-f1

  weighted-f1考虑了不同类别的重要性,也就是把每个类别的样本数量作为权重,计算加权f1。
weighted-f1

micro-f1

  micro-f1通过计算全局的TP、FN和FP来计算F1分数。我们首先将所有类别的TP、FP和FN值相加,然后将它们代入F1方程中,得到我们的micro-f1分数。
在这里插入图片描述

one more thing

  前面我们计算了三种不同的f1分数,为了验证计算是否正确,我们和sklearn.metrics.classification_report的结算结果对比下:
sklearn
  可以看到sklearn中macro avg和weighted avg的计算结果和我们的对应上了,但是没有micro avg的结果,这是为什么呢?再仔细观察下,发现图中的accuracy结果和micro-f1结果一致,这是巧合吗?

  这是因为micro-f1是计算所有样本中正确分类的比例(认真观察下micro-f1的计算公式),这个定义就是我们用来计算整体accuracy的。
此外,如果我们对精确率和召回率计算micro avg,我们将同样得到0.60。
在这里插入图片描述
  这些结果意味着,在多分类场景中,micro-f1、micro-precision、micro-recall和accuracy都相等(即本例中的0.60)。
这就解释了为什么sklearn分类报告只显示accuracy,因为micro-F1、micro-precision和micro-recall也具有相同的值。

  那么为什么会有如下等式存在呢?

micro-F1 = accuracy = micro-precision = micro-recall

  这是因为在某一类中的False Positive样本,一定是其他某类别的False Negative样本。听起来有点抽象?举个例子,比如说系统错把「car」预测成「boat」,那么对于car而言,其错误类型就是False Negative,对于boat而言,其错误类型就是False Positive。于此同时,Micro-precision和Micro-recall的数值都等于Accuracy,因为它们计算了对角线样本数和总样本数的比值。
  其实上面这一段才是我想写这篇博客的原因!!!

参考文献

https://www.cvmart.net/community/detail/2840

### 关于 Macro-F1 Score 的概念、计算方法及其应用场景 #### 宏观 F1 得分 (Macro-F1) 宏观 F1 得分是一种用于评估多类别或多标签分类模型性能的方法。该度量通过先独立地为每个类别计算其自身的精度(Precision)和召回率(Recall),再基于这两个值来得出各个类别的F1得分,最后取所有类别F1得分的简单平均作为整体表现的结果[^3]。 对于每一个类别 \(i\) ,可以定义如下: - **Precision**(精确率)= 正确预测为正例的数量 / 预测为正例总数 - **Recall** (召回率)= 正确预测为正例的数量 / 实际上属于正例的总数量 - **F1-Score** = 2 * ((Precision * Recall)/(Precision + Recall)) 接着,宏平均(Macro-average)会忽略不同类别的实例数差异,直接对各单个类目的F1分数做均值处理得到最终评分: \[ \text{Macro-F1}=\frac{\sum_{i=1}^{n}\mathrm {F1}_i}{n},\quad n=\left|\mathcal C\right|,\] 其中\(n\)表示类别数目, 而\(\mathrm {F1}_i\)代表第\(i\)个类别的F1得分. 这种做法使得即使是那些较少见的小众类别也能获得足够的重视,在某些特定领域比如医疗诊断或是罕见事件检测中显得尤为重要[^1]. 然而值得注意的是,当面对极度不平衡的数据分布情况时,由于宏平均忽略了各类别间样本量的不同,可能会给出误导性的结论。此时可能更适合采用加权版本或其他形式调整后的评价标准[^2]. ```python from sklearn.metrics import f1_score def macro_f1(y_true, y_pred): """Calculate the Macro-F1 score.""" return f1_score(y_true, y_pred, average='macro') ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值