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_positives
和false_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
多类别分类任务(multi-class)中为何precision,recall和F1相等?