为什么微 precision/recall 更适合 class 失衡?

Why micro precision/recall is better suited for class imbalance?

我有三个 class。假设第一个class的元素个数是30,第二个-30,第三个-1000。
一些算法给出了预测并得到了以下误差矩阵(行是预测,列是真实标签)。

[[  1   0  10]
 [ 29   2  10]
 [  0  28 980]]

从这个矩阵可以看出,第三个 class 很好地 class 化了,尽管其他 class 几乎总是错误的。

结果是以下精度和召回率:

Precision. 
 micro: 0.927 
 macro: 0.371
Recall. 
 micro: 0.927 
 macro: 0.360

从官方文档和很多文章,问题(例如,来自here)说,当classes不平衡时,最好使用micro。尽管直觉上似乎在这种情况下 micro 显示了太好的度量值,尽管事实上这两个 classes 实际上没有 class 化。

对于不平衡的 classes,micro-precision/recall 并不是“更好”。

事实上,如果您查看结果,很明显当您对不平衡的数据集做出错误的预测时,宏 precision/recall 的值非常小(代表性较差的标签的结果不佳)。

然而,微精度在计算时确实考虑了每个 class 的元素数。

例如来自sklearn的微观和宏观f1-score(精度和召回率相同):

'micro':
Calculate metrics globally by counting the total true positives, false negatives and false positives.

'macro':
Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.

因此,当您在没有很好表示的标签中获得较差结果时,宏实际上会惩罚您。

另一方面,微平均不会这样做,因为它会在全局范围内计算指标。

例如,这意味着如果您在 class 0 中有很多样本,并且说,许多预测是正确的,而 class 1 中的少数样本有很多错误的预测,micro-precision/recall 可能会产生较高的数值,而宏观指标 (precision/recall/f1-score) 会因特定标签上的不良结果而受到惩罚(产生较小的数值)。

现在真的取决于你对什么感兴趣。如果你想全局有好的结果,又不关心labels的分布,micro-metric可能是合适的。

然而,我们通常关心数据集中代表性较差的 classes 的结果,因此尽管有微观指标,但宏观指标的效用也很重要。