1. 程式人生 > >P-R曲線與mAP編輯器

P-R曲線與mAP編輯器

reference:http://blog.csdn.NET/marising/article/details/6543943
在資訊檢索、分類體系中,有一系列的指標,搞清楚這些指標對於評價檢索和分類效能非常重要,因此最近根據網友的部落格做了一個彙總。

準確率、召回率、F1

資訊檢索、分類、識別、翻譯等領域兩個最基本指標是召回率(Recall Rate)準確率(Precision Rate),召回率也叫查全率,準確率也叫查準率,概念公式:

             召回率(R

ecall)      =  系統檢索到的相關檔案 / 系統所有相關的檔案總數

             準確率(Precision) =  系統檢索到的相關檔案 / 系統所有檢索到的檔案總數

圖示表示如下:


注意:準確率和召回率是互相影響的,理想情況下肯定是做到兩者都高,但是一般情況下準確率高、召回率就低,召回率低、準確率高,當然如果兩者都低,那是什麼地方出問題了

。一般情況,用不同的閥值,統計出一組不同閥值下的精確率和召回率,如下圖:

 

 

如果是做搜尋,那就是保證召回的情況下提升準確率;如果做疾病監測、反垃圾,則是保準確率的條件下,提升召回。

所以,在兩者都要求高的情況下,可以用F1來衡量。

[python]  view plain  copy
  1. F1 = 2 * P * R / (P + R)  

 

公式基本上就是這樣,但是如何算圖1中的A、B、C、D呢?這需要人工標註,人工標註資料需要較多時間且枯燥,如果僅僅是做實驗可以用用現成的語料。當然,還有一個辦法,找個一個比較成熟的演算法作為基準,用該演算法的結果作為樣本來進行比照,這個方法也有點問題,如果有現成的很好的演算法,就不用再研究了。

 

AP和mAP(mean Average Precision)

mAP是為解決P,R,F-measure的單點值侷限性的。為了得到 一個能夠反映全域性效能的指標,可以看考察下圖,其中兩條曲線(方塊點與圓點)分佈對應了兩個檢索系統的準確率-召回率曲線

 

可以看出,雖然兩個系統的效能曲線有所交疊但是以圓點標示的系統的效能在絕大多數情況下要遠好於用方塊標示的系統。

從中我們可以 發現一點,如果一個系統的效能較好,其曲線應當儘可能的向上突出。

更加具體的,曲線與座標軸之間的面積應當越大

最理想的系統, 其包含的面積應當是1,而所有系統的包含的面積都應當大於0。這就是用以評價資訊檢索系統的最常用效能指標,平均準確率mAP其規範的定義如下:(其中P,R分別為準確率與召回率)

          即map實質上指的是pr曲線下的圍成的面積大小

PR曲線指的是Precision Recall曲線,翻譯為中文為查準率-查全率曲線。PR曲線在分類、檢索等領域有著廣泛的使用,來表現分類/檢索的效能。

 

例如,要從一個樣本S中分出標籤為L的樣本,假設樣本S中標籤確實為L的集合為SL,分類器將樣本標籤分為L的集合為SLC,SLC中標籤確實為L的集合為SLCR。那麼,

    查準率(Precision Ratio)= SLCR/SLC

    查全率(Recall Ratio)= SLCR/SL

 

如果是分類器的話,通過調整分類閾值,可以得到不同的P-R值,從而可以得到一條曲線(縱座標為P,橫座標為R)。通常隨著分類閾值從大到小變化(大於閾值認為標籤為L),查準率減小,查全率增加。比較兩個分類器好壞時,顯然是查得又準又全的比較好,也就是的PR曲線越往座標(1,1)的位置靠近越好。

按此順序逐個把樣本作為整理進行預測,則每次可以計算

出當前的查全率、查準率,以P(查準率)為縱軸,R(查全率)為橫軸作圖,就得到了P-R曲線P-R圖直觀的顯

示出學習器在樣本總體上的查全率、查準率,在進行比較時,若一個學習器的P-R曲線被另一個完全包住,則可

斷言後者優於前者,如圖1,A優於C;如果兩個學習器的P-R曲線發生了交叉,如A和B,則難以一般性的斷言兩

者孰優孰劣,只能在具體的P或R條件下進行比較。然而,在很多情形下,人們往往仍希望把學習器A和B比個高低,

這時一個比較合理的判斷依據是比較曲線下面積的大小,它在一定程度上表徵了學習器在P和R上取得相對“雙高”

的比例,但這個值不太容易估算,因此人們設計了一些綜合考慮P和R的度量。

平衡點(BEP)就是這樣一個度量,是P=R時的取值,基於BEP,可任務A優於B。


以召回率(真正率)為y軸,以特異性(假正率)為x軸,我們就直接得到了RoC曲線。從召回率和特異性的定

義可以理解,召回率越高,特異性越小,我們的模型和演算法就越高效。也就是畫出來的RoC曲線越靠近左上越

好。如下圖左圖所示。從幾何的角度講,RoC曲線下方的面積越大越大,則模型越優。所以有時候我們用RoC

曲線下的面積,即AUC(Area Under Curve)值來作為演算法和模型好壞的標準。


圖1 P-R曲線


圖2 ROC曲線



ROC和AUC

ROC和AUC是評價分類器的指標,上面第一個圖的ABCD仍然使用,只是需要稍微變換。



回到ROC上來,ROC的全名叫做Receiver Operating Characteristic。

ROC關注兩個指標

   True Positive Rate ( TPR )  = TP / [ TP + FN] ,TPR代表能將正例分對的概率

   False Positive Rate( FPR ) = FP / [ FP + TN] ,FPR代表將負例錯分為正例的概率

在ROC 空間中,每個點的橫座標是FPR,縱座標是TPR,這也就描繪了分類器在TP(真正的正例)和FP(錯誤的正例)間的trade-off。ROC的主要分析工具是一個畫在ROC空間的曲線——ROC curve。我們知道,對於二值分類問題,例項的值往往是連續值,我們通過設定一個閾值,將例項分類到正類或者負類(比如大於閾值劃分為正類)。因此我們可以變化閾值,根據不同的閾值進行分類,根據分類結果計算得到ROC空間中相應的點,連線這些點就形成ROC curve。ROC curve經過(0,0)(1,1),實際上(0, 0)和(1, 1)連線形成的ROC curve實際上代表的是一個隨機分類器。一般情況下,這個曲線都應該處於(0, 0)和(1, 1)連線的上方。如圖所示。


用ROC curve來表示分類器的performance很直觀好用。可是,人們總是希望能有一個數值來標誌分類器的好壞。

於是Area Under roc Curve(AUC)就出現了。顧名思義,AUC的值就是處於ROC curve下方的那部分面積的大小。通常,AUC的值介於0.5到1.0之間,較大的AUC代表了較好的Performance。

AUC計算工具:

http://mark.goadrich.com/programs/AUC/

P/R和ROC是兩個不同的評價指標和計算方式,一般情況下,檢索用前者,分類、識別等用後者。

參考連結:

http://www.vanjor.org/blog/2010/11/recall-precision/

http://bubblexc.com/y2011/148/

http://wenku.baidu.com/view/ef91f011cc7931b765ce15ec.html


http://blog.csdn.net/wangran51/article/details/7579100
http://blog.csdn.NET/shaoxiaohu1/article/details/8998515

最近一直在做相關推薦方面的研究與應用工作,召回率與準確率這兩個概念偶爾會遇到,

知道意思,但是有時候要很清晰地向同學介紹則有點轉不過彎來。

 

------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ----------------------------------------------
召回率和準確率是資料探勘中預測、網際網路中的搜尋引擎等經常涉及的兩個概念和指標。
召回率: Recall,又稱“查全率”——還是查全率 好記,也更能體現其實質意義。
準確率: Precision,又稱“精度” 、“正確率”。

以檢索為例,可以把搜尋情況用下圖表示:

  相關 不相關
檢索到 A(tp) B(fp)
未檢索到 C(tn) D(fn)  

Ture/False:              想要的/不想要的  
Positive / 
Negative:  檢索到 /未檢索到 

A:檢索到的,相關的                (搜到的也想要的) - True Positive
B:檢索到的,但是不相關的          (搜到的但沒用的False Positive
C:未檢索到的,但卻是相關的        (沒搜到,然而實際上想要的True Negative

D:未檢索到的,也不相關的          (沒搜到也沒用的)False Negative

如果我們希望:被檢索到的內容越多越好,

即 真正搜到的 / 真正搜到的也是想要的 以及 沒有搜到的也是想要的 的總數
真正檢索到佔總groudtruth的數目(true positive / true positive+true negative [ground truth num] )

這是追求“查全率”(tp/tp+tn) Recall,即A/(A+C),越大越好。

舉個例子: 如衣服檢索中,我們在全部圖片資料庫中每張圖片的groud truth總數加起來就是 tp+tn
然後我們的模型正確檢索到的資料 就是tp 查全率就是 tp/tp+tn 


如果我們希望:檢索到的文件中,真正想要的、也就是相關的越多越好,不相關的越少越好,
即 真正搜到的 / 真正搜到的也是想要的 以及 真正搜到但是不想要  的總數->
真正檢索到佔總檢索到的數目 (true positive / true positive+false positive [ground truth num] )

這是追求“準確率”(tp/tp+fp)Precision,即A/(A+B),越大越好。


舉個例子: 如衣服檢索中,我們對全部圖片資料庫中每張圖片使用自己的模型進行檢索到的總數中 加起來就是 tp+fp
然後自己模型真正檢索到的就是tp 查準率就是 tp/tp+fp



“召回率”與“準確率”雖然沒有必然的關係(從上面公式中可以看到),在實際應用中,是相互制約的。

要根據實際需求,找到一個平衡點。


往往難以迅速反應的是“召回率”。我想這與字面意思也有關係,從“召回”的字面意思不能直接看到其意義。

“召回”在中文的意思是:把xx調回來。“召回率”對應的英文“recall”,

recall除了有上面說到的“order sth to return”的意思之外,還有“remember”的意思。

Recall:the ability to remember sth. that you have learned or sth. that has happened in the past.

當我們問檢索系統某一件事的所有細節時(輸入檢索query查詢詞),

Recall指:檢索系統能“回憶”起那些事的多少細節,通俗來講就是“回憶的能力”。

“能回憶起來的細節數” 除以 “系統知道這件事的所有細節”,就是“記憶率”,

也就是recall——召回率。簡單的,也可以理解為查全率。


  根據自己的知識總結的,定義應該肯定對了,在某些表述方面可能有錯誤的地方。
假設原始樣本中有兩類,其中:

1:總共有 P個類別為1的樣本,假設類別1為正例。 
2:總共有N個類別為0 的樣本,假設類別0為負例。 
經過分類後:
3:有 TP個類別為1 的樣本被系統正確判定為類別1,FN 個類別為1 的樣本被系統誤判定為類別 0,

顯然有P=TP+FN; 
4:有 FP 個類別為0 的樣本被系統誤判斷定為類別1,TN 個類別為0 的樣本被系統正確判為類別 0,

顯然有N=FP+TN; 
 
那麼:


精確度(Precision):
P = TP/(TP+FP) ;  反映了被分類器判定的正例中真正的正例樣本的比重
 召回率(Recall),也稱為 True Positive Rate:
R = TP/(TP+FN) = 1 - FN/T;  反映了被正確判定的正例佔總的正例的比重 

準確率(Accuracy)

A = (TP + TN)/(P+N) = (TP + TN)/(TP + FN + FP + TN);    

反映了分類器統對整個樣本的判定能力——能將正的判定為正,負的判定為負 
轉移性(Specificity,不知道這個翻譯對不對,這個指標用的也不多),

也稱為 True NegativeRate 
S = TN/(TN + FP) = 1 – FP/N;   明顯的這個和召回率是對應的指標,

只是用它在衡量類別0 的判定能力。 
F-measure or balanced F-score
F = 2 *  召回率 *  準確率/ (召回率+準確率);這就是傳統上通常說的F1 measure,

另外還有一些別的F measure,可以參考下面的連結 
 
上面這些介紹可以參考: 
http://en.wikipedia.org/wiki/Precision_and_recall
同時,也可以看看:http://en.wikipedia.org/wiki/Accuracy_and_precision
 
為什麼會有這麼多指標呢?
        這是因為模式分類和機器學習的需要。判斷一個分類器對所用樣本的分類能力或者在不同的應用場合時,

需要有不同的指標。 當總共有個100 個樣本(P+N=100)時,假如只有一個正例(P=1),

那麼只考慮精確度的話,不需要進行任何模型的訓練,直接將所有測試樣本判為正例,

那麼 A 能達到 99%,非常高了,但這並沒有反映出模型真正的能力。另外在統計訊號分析中,

對不同類的判斷結果的錯誤的懲罰是不一樣的。舉例而言,雷達收到100個來襲 導彈的訊號,

其中只有 3個是真正的導彈訊號,其餘 97 個是敵方模擬的導彈訊號。假如系統判斷 98 個

(97 個模擬訊號加一個真正的導彈訊號)訊號都是模擬訊號,那麼Accuracy=98%,

很高了,剩下兩個是導彈訊號,被截掉,這時Recall=2/3=66.67%,

Precision=2/2=100%,Precision也很高。但剩下的那顆導彈就會造成災害。 
 
因此在統計訊號分析中,有另外兩個指標來衡量分類器錯誤判斷的後果:
漏警概率(Missing Alarm)
MA = FN/(TP + FN) = 1 – TP/T = 1 - R;  反映有多少個正例被漏判了

(我們這裡就是真正的導彈訊號被判斷為模擬訊號,可見MA此時為 33.33%,太高了) 

 
虛警概率(False Alarm)
FA = FP / (TP + FP) = 1 – P;反映被判為正例樣本中,有多少個是負例。 


       統計訊號分析中,希望上述的兩個錯誤概率儘量小。而對分類器的總的懲罰舊

是上面兩種錯誤分別加上懲罰因子的和:COST = Cma *MA + Cfa * FA。

不同的場合、需要下,對不同的錯誤的懲罰也不一樣的。像這裡,我們自然希望對漏警的懲罰大,

因此它的懲罰因子 Cma 要大些。 

       個人觀點:雖然上述指標之間可以互相轉換,但在模式分類中,

一般用 P、R、A 三個指標,不用MA和 FA。而且統計訊號分析中,也很少看到用 R 的。

好吧,其實我也不是IR專家,但是我喜歡IR,最近幾年國內這方面研究的人挺多的,google和百度的強勢,也說明了這個方向的價值。當然,如果你是學IR的,不用看我寫的這些基礎的東西咯。如果你是初學者或者是其他學科的,正想了解這些科普性質的知識,那麼我這段時間要寫的這個"資訊檢索X科普"系列也許可以幫助你。(我可能寫的不是很快,見諒)

至於為什麼名字中間帶一個字母X呢? 

為什麼先講PrecisionRecall呢?因為IR中很多演算法的評估都用到PrecisionRecall來評估好壞。所以我先講什麼是"好人",再告訴你他是"好人"

查準與召回(Precision & Recall) T

先看下面這張圖來理解了,後面再具體分析。下面用P代表PrecisionR代表Recall

   

   

通俗的講,Precision 就是檢索出來的條目中(比如網頁)有多少是準確的,Recall就是所有準確的條目有多少被檢索出來了。

下面這張圖介紹True PositiveFalse Negative等常見的概念,PR也往往和它們聯絡起來。

   

我們當然希望檢索的結果P越高越好,R也越高越好,但事實上這兩者在某些情況下是矛盾的。比如極端情況下,我們只搜出了一個結果,且是準確的,那麼P就是100%,但是R就很低;而如果我們把所有結果都返回,那麼必然R100%,但是P很低。

因此在不同的場合中需要自己判斷希望P比較高還是R比較高。如果是做實驗研究,可以繪製Precision-Recall曲線來幫助分析(我應該會在以後介紹)。

F1  Measure

前面已經講了,PR指標有的時候是矛盾的,那麼有沒有辦法綜合考慮他們呢?我想方法肯定是有很多的,最常見的方法應該就是F Measure了,有些地方也叫做F Score,都是一樣的。

F MeasurePrecisionRecall加權調和平均:

F = (a^2+1)P*R / a^2P +R

當引數a=1時,就是最常見的F1了:

F1 = 2P*R / (P+R)

很容易理解,F1綜合了PR的結果。
總之:

誤檢率: fp rate = sum(fp) / (sum(fp) + sum(tn))

查準率: precision rate = sum(tp) /  (sum(tp) + sum(fp)) 

查全率: recall rate = sum(tp) / (sum(tp) + sum(fn))

漏檢率:miss rate = sum(fn) / (sum(tp) + sum(fn)) -> (1-recall rate)

recall rate + miss rate  = 1


FPPI/FPPW
FP(false positive):錯誤正例->分類結果為正例(行人),實際上是負例(沒有行人)

Miss Rate:丟失率=測試集正例判別為負例的數目/測試集檢索到想要的正例數加上未檢測到不想要的 即是 全部groud truth的數量

與recall 對應等於 1-recall

目標檢測中另外常用的評價標準則是FPPW和FPPI,詳細應用可以參考這篇文章:

Pedestrian detection: A benchmark


兩者都側重考察FP(False Positive)出現的頻率。

FPPW (False Positive per Window)

基本含義:給定一定數目N的負樣本影象,分類器將負樣本判定為“正”的次數FP,其比率FP/N即為FPPW。意義與ROC中的假陽率相同。FPPW中,一張圖就是一個樣本。

FPPI (False Positive per Image)

基本含義:給定一定數目N的樣本集,內含N張影象,每張影象內包含或不包含檢測目標。

每張影象均需要標定:

1.包含目標的個數;

2. 目標的準確位置L。

而後在每張影象上執行分類器,檢測目標並得到位置p。然後,檢查每張影象內的檢測結果是否“擊中”標定的目標:

a. 若影象內無目標,而分類器給出了n個“目標”檢測結果,那麼False Positive 次數 +n;

b. 若影象內有目標,則判斷p是否擊中L,判斷標準參看上述文章(主要看p與L的重疊率)。若判斷未擊中,則False Positive 次數 +1。

最後 FPPI = (False Positive 次數)/N。(即平均每張圖中 能 正確檢索到的數目)

FPPI 相比於FPPW來說,更接近於分類器的實際應用情況。