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 曲线来计算分类系统中的最佳阈值,这一点尤其重要。
例如,在我的情况下,我的系统对于特定配置永远不会返回 fp
或 tn
,因此 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 中的零分母?的主要内容,如果未能解决你的问题,请参考以下文章