【问题标题】:Scikit-learn recall and precisionScikit-learn 召回率和准确率
【发布时间】:2022-12-17 03:31:59
【问题描述】:

我想了解 scikit-learn 的记起精确工作。这是documentation

因此,精度公式为:tp / (tp + fp) 和召回公式:tp / (tp + fn)。 tp = 真阳性,fp = 假阳性,fn = 假阴性。

让我们用一个例子来说明这一点:99 名患者健康,1 名患者生病。

示例 1:分类器决定 100 名患者中的每个人都是健康的。在这种情况下:

精度:99 / (99 + 1) = 0,9

召回:99 / (99 + 0) = 1

示例 2:100 名患者中的每一名都被归类为患病:

精度:0 / (0 + 0) = n.d.

回忆:0 / (0 + 99) = 0

我在这个 book 中找到了关于精度和召回率的另一种解释:

精度是模型报告的正确检测的比例,而召回是检测到的真实事件的比例。一个说没有人患有这种疾病的检测器将实现完美的精确度,但召回率为零。

示例 1 就是这种情况,对吗?没有人得病,说明大家都健康。完美的精度意味着 1,但在我的计算中它是 0.9。错误在哪里?还有为什么0召回?

一个说每个人都患有这种疾病的检测器将实现完美的召回,但精确度等于患有这种疾病的人的百分比(在我们的示例中,只有百万分之一的人患有这种疾病,精度为 0.0001%)。

这是示例 2:每个人都生病了。 precision 怎么能有除 undefined 以外的其他值呢?我计算的recall是0,这个例子怎么会是1呢?

【问题讨论】:

    标签: python machine-learning scikit-learn deep-learning


    【解决方案1】:

    您需要在这里做出的第一个也是最重要的决定是您的正面课程。

    在指定的用例中,检测病人更有意义,因此从逻辑上讲,正类应该生病,因此负类变得健康(是的,这有点违反直觉).

    现在,考虑到这一背景,混淆矩阵 (C-M) 将如下所示:

    因此,如果所有人都被确定为健康,则 C-M 将如下所示:

    现在, 可以根据问题中发布的公式计算精度和召回率。

    精度 = TP/(TP+FP) = 0/(0+1) = 0

    召回 = TP/(TP+FN) = 0/(0+1) = 0

    同理,如果所有的病人都被确定为生病了。混淆矩阵看起来像这样:

    精确召回看起来像:

    精度 = TP/(TP+FP) = 1/(1+99) = 1/100

    召回 = TP/(TP+FN) = 1/(1+0) = 1

    这也是 scikit-learn 采取召回的方式。基于您认为是您的用例的积极类别。

    【讨论】:

      猜你喜欢
      • 2017-06-21
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2015-10-03
      • 2014-10-07
      • 2020-03-26
      • 2019-07-28
      相关资源
      最近更新 更多