代码之家  ›  专栏  ›  技术社区  ›  Nayantara Jeyaraj

精度、召回和F1是否可以相同?

  •  1
  • Nayantara Jeyaraj  · 技术社区  · 7 年前

    我目前正在研究一个ML分类问题,我正在使用 sklearn 库的以下导入和相应代码如下所示。

    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 回复  |  直到 7 年前
        1
  •  3
  •   rvf    7 年前

    是的,这是可能的。我们假设二进制分类

    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 ,这三个指标同样相同。

        2
  •  0
  •   Ankita Mehta    7 年前

    这似乎是因为期权-average='weighted'

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

    “加权”: 计算每个标签的度量,并找到它们的平均支持权重(每个标签的真实实例数)。这将改变__macro__,以说明标签不平衡;这可能导致F分数不在精度和召回之间。