2017-05-16 76 views
0

這個問題是關於ROC曲線的,但它可以推廣到Precision-Recall曲線。ROC和Precision-Recall中的零分母?

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

但是,如果分母之一就是0:

正如你可能知道,該行曲線使用誤報率(FPR)和真陽性率(TPR),其中繪製的? TPR的最佳值是1,而FPR是0(實際上ROC空間中的最佳點是(0,1))。

如果我們使用ROC曲線來計算分類系統中的最優閾值,這一點尤爲重要。

例如,在我的情況,我的特定配置系統永遠不會返回fptn,所以FPR始終0作爲分母澄清

更新:

我使用的TF/PN和ROC曲線來確定我的分類器的閾值。特別是,我計算了數據集w.r.t中最相似元素頂部給定截斷點的這些值。給定的查詢。因此,如果我們只考慮頂部元素,T-F/P-N只能計算在非常相似的物體上,所以分類器不返回負值是非常現實的。因此,閾值非常嚴格,但分類器非常精確。就像「我不知道多少次應該回答什麼,但是當我這樣做時,我幾乎100%的時間給出了正確答案」。

當然,如果我們增加k出現負值並且閾值增加。結果,分類器的答案更頻繁,但錯誤結果的概率更高。

所以我想我會繼續k作爲調整參數,取決於所考慮的應用:如果我們希望有一個非常精確的分類,我們將設置一個小k,否則,如果我們考慮誤報,我們可以選擇一個更大的k

我的應用程序:

我的應用程序是圖像的相似性緩存:當接收到查詢時,系統檢查,如果有一個「非常相似」緩存的圖片。如果是,則返回相同的結果,否則查詢後端系統。 「足夠相似」是門檻。爲了確定一個好的閾值,我們選擇一個數據集圖像的子集,這個問題就是所謂的「查詢」。如上所述,爲了確定閾值,作爲第一種方法,我選擇頂部1元素,即最相似的圖像w.r.t.整個數據集中的查詢(設置圖像之一)。這是爲每個查詢完成的。從那裏,我使用上面解釋的ROC曲線計算閾值。所以,如果我們使用n查詢,我們獲得n預測。

如果我們使用這種方法,由此產生的閾值是非常嚴格的,因爲我們考慮頂部元素,平均距離非常小(並且非常精確),所以我們獲得了一個嚴格的閾值。

如果我們使用top-k的方法(比如k=10),我們選擇頂部的k最相似的圖片,我們採用與上面相同的方法。閾值變大,我們有更多的緩存命中,但也有誤報的可能性更高。在這種情況下,我們獲得k*n預測。如果我們將k設置爲大小爲m的整個數據集,則我們獲得k*m預測。

我希望這澄清了我以前UPDATE

+0

沒有FP和沒有TN表明你沒有負面的例子,只有積極的。我不太清楚在這種情況下還有哪些優化工作可以完成......只是用一個虛擬分類器預測一切都是正面的? – Calimo

+0

所以基本上你實際上有一種三元分類器,可以說「正面」,「負面」或「沒有電話」,這是否正確? – Calimo

+0

實際上,我沒有得到「我計算了數據集中前k個最相似元素的給定截斷值的這些值」。截止值在決策門檻上,而不是在數據點上。 – Calimo

回答

0

你應該只檢查計算你比之前分子是否等於0。例如

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

好的,謝謝你的回答,這是完全合理的。一個簡單的問題:爲什麼'返回0'?那是因爲'fp = 0'是一個理想的情況,所以我們返回最優值?如果是這樣的話,當我們計算'TPR'時,我們應該'返回0',因爲'tp = 0'是最壞的情況(我們想最大化'TPR')。我對麼? – justHelloWorld

+1

有了這些極限,你的「roc曲線」就變成垂直的'(fp = 0)'或水平的'(tp = 0)'線。返回'0.0'的原因僅僅是因爲對於x不等於0的所有值,0/x等於0如果x等於0,這意味着你沒有誤報並且沒有真正的否定。因此,你所有的否定都是假陰性,你所有的積極都是真正的。因此,對於所有可能的TPR值,您的FPR等於0。這意味着你選擇了一個完美的精確度和變量回憶的模型,這取決於你擁有的假陰性的數量。 –

+0

感謝您的澄清,它解決了我所有的疑惑! – justHelloWorld

0

事實上,你沒有FP和沒有TN表明你沒有負面的例子,只有積極的。因此你不能計算你的分類器將錯誤地分類爲正數的比例是多少。它可能是0或100%,沒有辦法知道。

您需要收集一些「黃金」底片,看看您的分類器如何執行。如果不這樣做,您可能會冒險選擇一個「虛擬」分類器,該分類器將正分類分配給所有觀察值,並具有100%的準確性。

+0

感謝您的回答。我更新了我的問題,提供了更多細節和一些考慮。如果你能檢查出來,我會很感激。 – justHelloWorld