精度,召回率和F1可以相同吗?

时间:2019-01-07 03:58:05

标签: machine-learning scikit-learn classification precision precision-recall

我目前正在处理ML分类问题,并且正在使用sklearn库的以下导入和相应代码来计算Precision,Recall和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)获得相同的值?

在这方面的任何澄清将不胜感激。

2 个答案:

答案 0 :(得分:3)

是的,这是可能的。假设使用

进行二进制分类

Pr = TP  / (TP + FP); Re = (TP + FN); F1 = 2TP / (2TP + FP + FN)

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

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

F1 = 2 * (Pr * Re) / (Pr + Re)

如果Pr = Re,则所有三个指标都相同。

答案 1 :(得分:0)

这似乎是由于选项-average ='weighted'

引用:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html

  

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