ROC 和 Precision-Recall 中的零分母?

Posted

技术标签:

【中文标题】ROC 和 Precision-Recall 中的零分母?【英文标题】:zero denominator in ROC and Precision-Recall? 【发布时间】:2017-10-15 22:54:39 【问题描述】:

这个问题是关于ROC曲线的,但是可以推广到Precision-Recall曲线。

您可能知道,行曲线是使用假阳性率 (FPR) 和真阳性率 (TPR) 绘制的,其中:

TPR = tp / (tp + fn ) // tp= true positives, fn = false negatives
FPR = fp / (fp + tn ) // fp = false positives, tn = true negatives

但是如果分母之一是 0 怎么办? TPR 的最优值为 1,而FPR 为 0(实际上 ROC 空间中的最优值是(0,1))。

如果我们使用 ROC 曲线来计算分类系统中的最佳阈值,这一点尤其重要。

例如,在我的情况下,我的系统对于特定配置永远不会返回 fptn,因此 FPR 始终以 0 作为分母

更新说明:

我正在使用 T-F/P-N 和 ROC 曲线来确定我的分类器的阈值。特别是,我为数据集中 w.r.t 中最相似元素的顶部-k 上的给定截止值计算这些值。给定的查询。因此,如果我们仅考虑 top-1 元素,则仅在非常相似的对象上计算 T-F/P-N,因此分类器不返回负数是非常现实的。结果,阈值非常严格,但分类器非常精确。诸如“很多次我不知道该回答什么,但当我回答时,我几乎 100% 地给出了正确答案”。

当然,如果我们增加k,就会出现负数并且阈值会增加。结果,分类器回答的频率更高,但错误结果的概率更高。

所以我认为我会保留k 作为调整参数,具体取决于所考虑的应用:如果我们想要一个非常精确的分类器,我们将设置一个小的k,否则如果我们考虑误报,我们可以选择一个更大的k

我的申请:

我的应用是图片的相似度缓存:当收到查询时,系统会检查是否有“足够相似”的缓存图片。如果是,则返回相同的结果,否则查询后端系统。 “足够相似”是门槛。为了确定一个好的阈值,我们选择数据集图像的一个子集,在这个问题中称为“查询”。为了确定阈值,如上所述,作为第一种方法,我选择 top-1 元素,即与 w.r.t 最相似的图像。整个数据集中的查询(设置图像之一)。这是为每个查询完成的。从那里,我使用 ROC 曲线计算阈值,如上所述。因此,如果我们使用n 查询,我们将获得n 预测。

如果我们使用这种方法,得到的阈值是非常严格的,因为我们考虑到 top-1 元素,平均距离非常小(而且非常精确),因此我们得到了一个严格的阈值。

如果我们使用 top-k 方法(比如k=10),我们会选择最相似的顶部k 图像,并执行与上述相同的方法。阈值变大,我们有更多的缓存命中,但误报的概率也更高。在这种情况下,我们获得k*n 预测。如果我们将k 设置为大小为m 的整个数据集,我们将获得k*m 预测。

我希望这能澄清我之前的更新

【问题讨论】:

没有 FP 和没有 TN 表明你没有反例,只有正面。我不太确定在这种情况下还有什么需要优化的......只需使用虚拟分类器将所有内容预测为正面? 所以基本上你实际上有一种三元分类器,可以说“肯定”、“否定”或“不打电话”,对吗? 实际上我没有得到“我为数据集中前 k 个最相似元素的给定截止值计算这些值”。截止是在决策阈值上,而不是在数据点上。 @Calimo 再次感谢您的评论。我再次更新了我的问题,解释了我的应用程序和 top-k 概念,我希望能澄清一切。 【参考方案1】:

在计算比率之前,您应该检查分子是否等于 0。例如

if (fp == 0):
  return 0.0
return fp/(fp + tn)

【讨论】:

好的,谢谢您的回答,这完全有道理。一个简单的问题:为什么是return 0?那是因为fp=0 是理想情况,所以我们返回最优值吗?如果是这种情况,当我们计算TPR 时,我们也应该return 0,因为tp=0 是最坏的情况(我们希望最大化TPR)。我说的对吗? 在这些极端情况下,您的roc curve 会变成垂直的(fp = 0) 或水平的(tp = 0) 线。返回0.0 的原因仅仅是因为`0/x 等于0 对所有不等于0 的x 值' 如果x 等于0,这意味着你没有误报,也没有真正的否定。因此,您所有的否定都是假阴性,所有的肯定都是真阳性。因此,对于所有可能的 TPR 值,您的 FPR 等于 0。这意味着您选择了一个模型,该模型具有完美的精度和可变召回率,这取决于您拥有的假阴性数量。 感谢您的澄清,它解决了我所有的疑惑! @BrianVanover “你所有的否定都是假阴性,你所有的阳性都是真阳性”充其量是误导,应该阅读“你所有的负面预测都是假阴性,你所有的正面预测是真正的阳性”。 因此,您没有“黄金”负面观察,FPR 只是未定义,因为它是错误分类为正面的负面事件的比例。你根本没有数据来计算它,使用 0 是不合理的乐观。如果确实需要用数字替换,那么至少使用 1 作为更保守的估计。【参考方案2】:

你没有 FP 和 TN 的事实表明你没有反例,只有正面。因此,您无法计算其中有多少比例会被您的分类器错误地分类为阳性。可能是 0 或 100%,没有办法知道。

您需要收集一些“黄金”底片,看看您的分类器对它们的表现如何。如果不这样做,您可能会选择一个“虚拟”分类器,将正类分配给所有观察值,准确率达到 100%。

【讨论】:

感谢您的回答。我更新了我的问题,提供了更多细节和一些注意事项。如果您能检查一下,我将不胜感激。

以上是关于ROC 和 Precision-Recall 中的零分母?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习 评价分类结果 (下)

如何在 MATLAB 中为基于内容的图像检索绘制 Precision-Recall 图?

Precision-Recall Curve

Recall值与Precision-Recall曲线的关系

R中PRROC包的Precision-Recall曲线计算

SGD 分类器 Precision-Recall 曲线