ROC和Precision-Recall中的零分母?

时间:2017-05-16 18:03:06

标签: information-retrieval roc precision-recall

这个问题与ROC曲线有关,但可以推广到精确回忆曲线。

如您所知,行曲线使用误报率(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最相似元素的给定截止值的这些值。给定的查询。因此,如果我们仅考虑顶部 - 1元素,则仅在非常相似的对象上计算T-F / P-N,因此分类器不返回负数是非常现实的。结果,阈值非常严格,但分类器非常精确。像“我不知道该怎么回答很多次,但是当我这样做时,我几乎100%都给出了正确答案”。

当然,如果我们增加k个否定值并且阈值会增加。结果,分类器经常回答,但错误结果的概率更高。

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

我的申请:

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

如果我们使用这种方法,结果阈值非常严格,因为我们考虑顶部 - 1元素,平均距离非常小(并且非常精确),因此我们获得了严格的阈值。 / p>

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你没有FP而没有TN的事实表明你没有负面的例子,只有正面。因此您无法计算您的分类器将错误地归类为正数的比例。它可能是0或100%,没有办法知道。

你需要收集一些"黄金"否定并看看你的分类器如何对它们执行。如果不这样做,你就有可能选择一个"虚拟"分类器,为所有观察指定正类,准确率为100%。