这个问题与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曲线计算分类系统中的最佳阈值,这一点尤其重要。
例如,就我而言,我的特定配置系统永远不会返回fp
或tn
,因此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
个预测。
我希望这能澄清我以前的更新
答案 0 :(得分:1)
在计算比率之前,你应该检查分子是否等于0。例如
if (fp == 0):
return 0.0
return fp/(fp + tn)
答案 1 :(得分:0)
你没有FP而没有TN的事实表明你没有负面的例子,只有正面。因此您无法计算您的分类器将错误地归类为正数的比例。它可能是0或100%,没有办法知道。
你需要收集一些"黄金"否定并看看你的分类器如何对它们执行。如果不这样做,你就有可能选择一个"虚拟"分类器,为所有观察指定正类,准确率为100%。