首页 > 解决方案 > 类不平衡的 Scikit-Learn 中的 Micro F1 分数

问题描述

我有一些类不平衡和一个简单的基线分类器,它将多数类分配给每个样本:

from sklearn.metrics import precision_score, recall_score, confusion_matrix

y_true = [0,0,0,1]
y_pred = [0,0,0,0]
confusion_matrix(y_true, y_pred)

这产生

[[3, 0],

[1, 0]]

这意味着 TP=3,FP=1,FN=0。

到目前为止,一切都很好。现在我想计算精度和召回率的微观平均值。

precision_score(y_true, y_pred, average='micro') # yields 0.75
recall_score(y_true, y_pred, average='micro') # yields 0.75

我对精度很好,但为什么召回不是 1.0?假设 FP > 0 和 FN == 0,在这个例子中它们怎么可能是一样的?我知道这一定与微平均有关,但我无法理解这一点。

标签: scikit-learnprecision-recall

解决方案


是的,这是因为微平均。请参阅此处的文档以了解其计算方式:

请注意,如果包括所有标签,多类设置中的“微”平均将产生 与准确率相同的精度、召回率和 f 分数。

正如您在上面的链接页面中看到的,精度和召回率都定义为: 在此处输入图像描述

其中 R(y, y-hat) 是:

在此处输入图像描述

因此,在您的情况下,Recall-micro 将计算为

R = number of correct predictions / total predictions = 3/4 = 0.75

推荐阅读