Precision、Recall 和 F1 可以是相同的值吗?

Posted

技术标签:

【中文标题】Precision、Recall 和 F1 可以是相同的值吗?【英文标题】:Can the Precision, Recall and F1 be the same value? 【发布时间】:2019-06-01 18:20:53 【问题描述】:

我目前正在研究 ML 分类问题,我正在使用 sklearn 库的以下导入和相应代码计算精度、召回率和 F1,如下所示。

from sklearn.metrics import precision_recall_fscore_support

print(precision_recall_fscore_support(y_test, prob_pos, average='weighted'))

结果

0.8806451612903226, 0.8806451612903226, 0.8806451612903226

对于 ML 分类问题,是否有可能获得所有 3 个相同的值,即精度、召回率和 F1?

我们将不胜感激任何关于这方面的澄清。

【问题讨论】:

精度和召回率可能是如果 FP 和 FN 为 0.5/0.5 F1 不太可能...... @Rob 感谢您回来。那么这是否意味着分类器预测可能存在错误? 您可以检查是否打印了false_positivesfalse_negatives 的号码。如果这两个数字相同,那么您就可以了。但正如@Rob 所说,这不太可能。 【参考方案1】:

是的,这是可能的。让我们假设用

进行二分类

Pr = Re = F1 的简单解决方案是TP = 0。所以我们知道精度、召回率和 F1 通常可以具有相同的值。现在,这不适用于您的具体结果。如果我们求解方程组,我们会找到另一个解:FP = FN。因此,如果误报数与误报数相同,则所有三个指标的值都相同。

对于多类分类问题,我们有

如果Pr = Re,那么所有三个指标都是相同的。

【讨论】:

感谢您的回复。这澄清了我的问题。【参考方案2】:

这似乎是因为选项 - average='weighted'

参考:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html

'加权': 计算每个标签的指标,并通过支持度(每个标签的真实实例数)找到它们的平均加权。这会改变“宏观”以解决标签不平衡问题;它可能导致 F 分数不在精确率和召回率之间。

【讨论】:

以上是关于Precision、Recall 和 F1 可以是相同的值吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用precision_recall_curve 计算最大f1 分数?

常用的评价指标:accuracy、precision、recall、f1-score、ROC-AUC、PR-AUC

F1值

多类别分类任务(multi-class)中为何precision,recall和F1相等?

多类别分类任务(multi-class)中为何precision,recall和F1相等?

准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。