多类别分类设置中的微观平均与宏观平均表现


102

我正在尝试使用3个类的多类分类设置。类分布偏斜,大多数数据属于3类中的1种。(类别标签为1,2,3,其中67.28%的数据属于类别标签1,属于类别2的数据为11.99%,其余属于类别3)

我正在为此数据集训练一个多类分类器,并且获得了以下性能:

                    Precision           Recall           F1-Score
Micro Average       0.731               0.731            0.731
Macro Average       0.679               0.529            0.565

我不确定为什么所有的Micro平均水平。性能相等,这也是为什么Macro的平均性能如此低的原因。


1
您不能在平均之前查看各个真实的正数吗?同样,宏观平均数往往低于微观平均数
oW_

微观和宏观F量度是特定于文本分类或检索的,还是可以用于任何识别或分类问题的.....如果是这样,我们可以在其中获得每个或任何其他反射的意义...
同上

1
微观平均精度与数据集的精度不一样吗?据我了解,对于微平均精度,您可以计算所有真实阳性的总和,然后将其除以所有真实阳性的总和再加上所有假阳性的总和。因此,基本上,您可以将正确识别的预测数除以预测总数。与精度计算有何不同?为什么我们需要一个新的特殊精度术语,使事情变得更加复杂,而不是仅仅坚持精度值?请证明我错了,这样我才能安然入睡。
Nico Zettler

1
@NicoZettler你是正确的。将每个数据点精确分配给一个类别时,微平均精度和微平均召回率都等于精度。关于您的第二个问题,当分类被多标签(每个数据点可能被分配多个标签)和/或在多分类情况下排除某些类别时,微观平均指标与总体准确性有所不同。参见scikit-learn.org/stable/modules/…
约翰逊

Answers:


144

微观平均值和宏观平均值(无论采用何种度量标准)都会计算出稍微不同的东西,因此它们的解释也有所不同。宏平均值将为每个类别独立计算指标,然后取平均值(因此将所有类别均等对待),而微观平均值将汇总所有类别的贡献以计算平均值。在多类分类设置中,如果您怀疑类不平衡(例如,与其他类相比,一个类的示例可能更多),则最好采用微平均。

为了说明原因,例如以精度。假设您有一个“一比所有”(每个示例只有一个正确的类输出)多类分类系统,其中包含四个类,并且在测试时具有以下数字:P[R=ŤPŤP+FP

  • A类:1个TP和1个FP
  • B级:10 TP和90 FP
  • C级:1 TP和1 FP
  • D类:1 TP和1 FP

您可以轻松地看到,而P r B = 0.1PrA=PrC=PrD=0.5PrB=0.1

  • 然后,将使用宏平均值进行计算:Pr=0.5+0.1+0.5+0.54=0.4
  • 微观平均值将计算:Pr=1+10+1+12+100+2+2=0.123

这些精度值完全不同。直观地,在宏平均中,A,C和D类的“良好”精度(0.5)有助于维持“体面的”总体精度(0.4)。尽管从技术上讲这是正确的(在所有类中,平均精度为0.4),但由于大量示例未正确分类,因此有点误导。这些示例主要对应于B级,因此尽管构成了测试数据的94.3%,但它们仅对平均值贡献了1/4。微观平均值将充分捕获此类不平衡,并使整体平均精度降低到0.123(与主要B类(0.1)的精度更一致)。

出于计算原因,有时计算类平均值然后对其进行宏平均可能更方便。如果已知班级不平衡是一个问题,则有几种解决方法。一种是不仅报告宏观平均值,而且报告其标准偏差(对于3个或更多类)。另一个是计算加权宏平均值,其中每个类别对平均值的贡献都可以通过可用的相对示例数进行加权。在上述情况下,我们获得:

P ř 一个Ç ř ø - 小号d Ê v = 0.173Prmacromean=0.25·0.5+0.25·0.1+0.25·0.5+0.25·0.5=0.4 P[R一种C[RØ-sŤdËv=0.173

P[R一种C[RØ-wË一世GHŤËd=0.0189·0.5+0.943·0.1+0.0189·0.5+0.0189·0.5=0.009+0.094+0.009+0.009=0.123

大的标准偏差(0.173)已经告诉我们0.4的平均值并不是由类之间的均匀精度引起的,但是加权的加权平均数可能更容易计算,这实质上是计算微观平均值的另一种方式。


10
这个答案值得更多的批评,因为它有助于建立对微观和宏观行为为何有所不同的理解,而不仅仅是列出公式(这是原始内容)。
steffen

2
这如何解释原始问题中的不同宏值?
shakedzy

3
如果您翻转答复中所概述的场景,而大型类的表现要好于小型类,那么您会期望看到微观平均水平高于宏观平均水平(这是问题中所报告的行为)。宏值不同,或多或少是可以预期的,因为您正在测量不同的事物(精度,召回率...)。我认为为什么微平均数都一样?
pythiesest

4
我不同意这样的说法,即在数据集不平衡的情况下,微观平均优先于宏观。实际上,对于F得分,宏观优先于微观,因为前者对每个类别都具有同等的重要性,而后者对每个样本都具有同等的重要性(这意味着样本数量越多,则最终分数中所占的比重就越大)偏爱多数类,就像准确性一样)。资料来源:1. cse.iitk.ac.in/users/purushot/papers/macrof1.pdf 2. clips.uantwerpen.be/~vincent/pdf/microaverage.pdf
shahensha

3
“加权宏观平均数”是否总是等于微观平均数?在Scikit-Learn中,“加权”的定义略有不同:“计算每个标签的指标,并找到其平均值,并按支持加权(每个标签的真实实例数)。”来自F1分数的文档

20

原始帖子-http: //rushdishams.blogspot.in/2011/08/micro-and-macro-average-of-precision.html


在微平均方法中,您对不同集合的系统的真实正值,错误正值和错误负值求和,并将它们应用以获得统计信息。

整rick,但我发现这很有趣。您可以通过两种方法获得信息检索和分类的平均统计信息。

1.微观平均法

在微平均方法中,您对不同集合的系统的真实正值,错误正值和错误负值求和,并将它们应用以获得统计信息。例如,对于一组数据,系统的

True positive (TP1)  = 12
False positive (FP1) = 9
False negative (FN1) = 3

57.14=ŤP1个ŤP1个+FP1个80=ŤP1个ŤP1个+Fñ1个

而对于另一组数据,系统的

True positive (TP2)  = 50
False positive (FP2) = 23
False negative (FN2) = 9

那么精度(P2)和召回率(R2)将分别为68.49和84.75

现在,使用微平均法的系统的平均精度和召回率是

精密度的微平均值=ŤP1个+ŤP2ŤP1个+ŤP2+FP1个+FP2=12+5012+50+9+23=65.96

召回率的微观平均值=ŤP1个+ŤP2ŤP1个+ŤP2+Fñ1个+Fñ2=12+5012+50+3+9=83.78

微观平均F分数将仅仅是这两个数字的谐波平均值。

2.宏观平均法

该方法是直接的。只需取平均值的平均值,然后在不同集合上调用系统即可。例如,对于给定示例,系统的宏平均精度和召回率是

宏观平均精度=P1个+P22=57.14+68.492=62.82 宏观平均召回率=[R1个+[R22=80+84.752=82.25

宏平均F分数将仅仅是这两个数字的谐波均值。

适应性宏平均法可以在您想了解系统如何跨数据集整体执行时使用。您不应针对此平均值提出任何具体决定。

另一方面,当数据集大小变化时,微平均可能是有用的度量。


21
您应该归功于此博客文章吗?
xiaohan2012 '17

3
是的@ xiaohan2012,他只是复制了答案。
曼努埃尔·G

这是我对堆栈溢出的第一个答案,我不太确定如何做到这一点。您可以提出修改建议吗?我会接受的。谢谢
Rahul Reddy Vemireddy 17-10-22

可能值得注意的是,此处的F1分数不一定与通常使用的宏平均F1分数相同(例如在scikit中实现)或在本文中进行描述)。通常,分别针对每个类别/组计算F1分数,然后根据不同的F1分数计算平均值(此处以相反的方式进行:首先计算宏平均准确度/召回率,然后计算F1分数)。
米兰尼亚

11

在多类设置中,微平均精度和召回率始终相同。

P=CŤPCCŤPC+CFPC[R=CŤPCCŤPC+CFñC
其中c是类别标签。

CFPC=CFñC

因此,P =R。换句话说,对于一个类,每个单个的错误预测将是一个假阳性,对于一个类,每个单个的负预测将是一个假阴性。如果将二元分类的情况视为双分类,并计算微观平均精度并回想起来,它们将是相同的。

Rahul给出的答案是平均二进制精度和从多个数据集中调用的情况。在这种情况下,微平均精度和召回率是不同的。


2

那是应该的。我的研究结果相同。起初看起来很奇怪。但是,在对多类单标签分类器的结果进行微平均时,精度和召回率应相同。这是因为,如果您考虑分类错误c1 = c2(其中c1和c2是2个不同的类别),则分类错误对于c2而言为假阳性(fp),对于c1为假阴性(fn)。如果对所有类别的fn和fp求和,则会得到相同的数字,因为针对一个类别将每个错误分类都计为fp,对于另一类别将其归为fn。


0

我认为pythiest的答案很好地解释了宏观平均水平低于微观平均水平的原因(主导阶层的预测较好,因此微观平均水平有所提高)。

但是,精确度,召回率和F1分数的微观平均值相等是因为对这些指标进行微观平均会导致整体准确性(因为微观平均水平将所有类别都视为阳性)。请注意,如果Precision和Recall相等,则F1分数仅等于Precision / Recall。

至于“加权宏观平均数”是否总是等于“微观平均数”?我做了一些不同的实验。阶级和不同阶级的失衡,事实证明这不是必须的。

这些陈述是在假设我们正在考虑同一数据集的所有类的情况下做出的(与Rahul Reddy Vemireddy的回答相反)


0

使用宏F1分数的优势在于,它对所有数据点都具有同等的权重,例如:让我们考虑一下,因为F1微型计算机独立地获取了不同标签的所有Recall和Presession的总和,因此当我们出现类不平衡时像T1 = 90%,T2 = 80%,T3 = 5,则F1 Micro对所有类别都赋予相等的权重,并且不受类别分布的偏差的影响log损失的Log损失惩罚了类别中的小偏差

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.