準確率(Accuracy), 精確率(Precision), 召回率(Recall)和F1-Measure

機器學習(ML),天然語言處理(NLP),信息檢索(IR)等領域,評估(Evaluation)是一個必要的 工做,而其評價指標每每有以下幾點:準確率(Accuracy),精確率(Precision),召回率(Recall)和F1-Measure。(注: 相對來講,IR 的 ground truth 不少時候是一個 Ordered List, 而不是一個 Bool 類型的 Unordered Collection,在都找到的狀況下,排在第三名仍是第四名損失並非很大,而排在第一名和第一百名,雖然都是「找到了」,可是意義是不同的,所以 更多可能適用於 MAP 之類評估指標。)html

本文將簡單介紹其中幾個概念。中文中這幾個評價指標翻譯各有不一樣,因此通常狀況下推薦使用英文。python

如今我先假定一個具體場景做爲例子。
git

假如某個班級有男生80人,女生20人,共計100人.目標是找出全部女生.
如今某人挑選出50我的,其中20人是女生,另外還錯誤的把30個男生也看成女生挑選出來了.
做爲評估者的你須要來評估(evaluation)下他的工做github

首先咱們能夠計算準確率(accuracy),其定義是: 對於給定的測試數據集,分類器正確分類的樣本數與總樣本數之比。也就是損失函數是0-1損失時測試數據集上的準確率[1]. 算法

這樣說聽起來有點抽象,簡單說就是,前面的場景中,實際狀況是那個班級有男的和女的兩類,某人(也就是定義中所說的分類器)他又把班級中的人分爲男女兩類。accuracy須要獲得的是此君分正確的人總人數的比例。很容易,咱們能夠獲得:他把其中70(20女+50男)人斷定正確了,而總人數是100人,因此它的accuracy就是70 %(70 / 100). c#

由準確率,咱們的確能夠在一些場合,從某種意義上獲得一個分類器是否有效,但它並不老是能有效的評價一個分類器的工做。舉個例子,google抓取 了argcv 100個頁面,而它索引中共有10,000,000個頁面,隨機抽一個頁面,分類下,這是否是argcv的頁面呢?若是以accuracy來判斷個人工 做,那我會把全部的頁面都判斷爲"不是argcv的頁面",由於我這樣效率很是高(return false,一句話),而accuracy已經到了99.999%(9,999,900/10,000,000),完爆其它不少分類器辛辛苦苦算的值,而我這個算法顯然不是需求期待的,那怎麼解決呢?這就是precision,recall和f1-measure出場的時間了.機器學習

在說precision,recall和f1-measure以前,咱們須要先須要定義TP,FN,FP,TN四種分類狀況.
按照前面例子,咱們須要從一個班級中的人中尋找全部女生,若是把這個任務當成一個分類器的話,那麼女生就是咱們須要的,而男生不是,因此咱們稱女生爲"正類",而男生爲"負類".ide

  相關(Relevant),正類 無關(NonRelevant),負類
被檢索到(Retrieved) true positives(TP 正類斷定爲正類,例子中就是正確的斷定"這位是女生") false positives(FP 負類斷定爲正類,"存僞",例子中就是分明是男生卻判斷爲女生,當下僞娘橫行,這個錯常有人犯)
未被檢索到(Not Retrieved) false negatives(FN 正類斷定爲負類,"去真",例子中就是,分明是女生,這哥們卻判斷爲男生--梁山伯同窗犯的錯就是這個) true negatives(TN 負類斷定爲負類,也就是一個男生被判斷爲男生,像我這樣的純爺們一準兒就會在此處)

經過這張表,咱們能夠很容易獲得這幾個值:
TP=20
FP=30
FN=0
TN=50函數

精確率(precision)的公式是P = \frac{TP}{TP+FP},它計算的是全部"正確被檢索的item(TP)"佔全部"實際被檢索到的(TP+FP)"的比例.工具

在例子中就是但願知道此君獲得的全部人中,正確的人(也就是女生)佔有的比例.因此其precision也就是40%(20女生/(20女生+30誤判爲女生的男生)).

召回率(recall)的公式是R = \frac{TP}{TP+FN},它計算的是全部"正確被檢索的item(TP)"佔全部"應該檢索到的item(TP+FN)"的比例。

在例子中就是但願知道此君獲得的女生佔本班中全部女生的比例,因此其recall也就是100%(20女生/(20女生+ 0 誤判爲男生的女生))

F1值就是精確值和召回率的調和均值,也就是
\frac{2}{F_1} = \frac{1}{P} + \frac{1}{R}
調整下也就是
F_1 = \frac{2PR}{P+R} = \frac{2TP}{2TP + FP + FN}

例子中 F1-measure 也就是約爲 57.143%(\frac{2 * 0.4 * 1}{0.4 + 1}).

須要說明的是,有人[2]列了這樣個公式
F_a = \frac{(a^2 + 1 )PR}{a^2(P+R)}
將F-measure通常化.

F1-measure認爲精確率和召回率的權重是同樣的,但有些場景下,咱們可能認爲精確率會更加劇要,調整參數a,使用Fa-measure能夠幫助咱們更好的evaluate結果.

話雖然不少,其實實現很是輕鬆,點擊此處能夠看到個人一個簡單的實現.

References

[1] 李航. 統計學習方法[M]. 北京:清華大學出版社,2012.
[2] 準確率(Precision)、召回率(Recall)以及綜合評價指標(F1-Measure )

假設一個班級有100個學生,其中男生70人,女生30人。以下圖,藍色矩形表示男生,橙色矩形表示女生。

又假設,咱們不知道這些學生的性別,只知道他們的身高和體重。咱們有一個程序(分類器),這個程序能夠經過分析每一個學生的身高和體重,對這100個學生的性別分別進行預測。最後的預測結果爲,60人爲男生,40人爲女生,以下圖。

TP:實際爲男生,預測爲男生;

FP:實際爲女生,預測爲男生;

FN:實際爲男生,預測爲女生;

TN:實際爲女生,預測爲女生;

  • 準確率(Accuracy) = (TP + TN) / 總樣本 =(40 + 10)/100 = 50%。 定義是: 對於給定的測試數據集,分類器正確分類的樣本數與總樣本數之比。
  • 精確率(Precision) = TP / (TP + FP) = 40/60 =  66.67%。它表示:預測爲正的樣本中有多少是真正的正樣本,它是針對咱們預測結果而言的。Precision又稱爲查準率。
  • 召回率(Recall) = TP / (TP + FN) = 40/70 = 57.14% 。它表示:樣本中的正例有多少被預測正確了, 它是針對咱們原來的樣本而言的。Recall又稱爲查全率。

 

能夠看到,上面的預測結果並非很好。假設咱們優化了程序後,再次進行預測。預測結果爲:

  • 準確率(Accuracy) = (TP + TN) / 總樣本 =(50 + 20)/100 = 70%
  • 精確率(Precision) = TP / (TP + FP) = 50/60 =  83%
  • 召回率(Recall) = TP / (TP + FN) = 50/70 = 71.43% 

各項指標都比第一次高,說明預測效果更好。從圖上也能看出來,預測爲男生的範圍與實際男生範圍更接近。

 

==================================================

本身理解 + 我老師的說法就是,準確率就是找得對,召回率就是找得全。

大概就是你問問一個模型,這堆東西是否是某個類的時候,準確率就是 它說是,這東西就確實是的機率吧,召回率就是, 它說是,但它漏說了(1-召回率)這麼多

==================================================

在信息檢索、分類體系中,有一系列的指標,搞清楚這些指標對於評價檢索和分類性能很是重要,所以最近根據網友的博客作了一個彙總。

準確率、召回率、F1

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

             召回率(Recall)      =  系統檢索到的相關文件 / 系統全部相關的文件總數

             準確率(Precision) =  系統檢索到的相關文件 / 系統全部檢索到的文件總數

圖示表示以下:



A:檢索到的,相關的 

  A:             (搜到的也想要的)
B:檢索到的,可是不相關的          (搜到的但沒用的)
C:未檢索到的,但倒是相關的        (沒搜到,然而實際上想要的)
D:未檢索到的,也不相關的          (沒搜到也沒用的)

 

注意:準確率和召回率是互相影響的,理想狀況下確定是作到二者都高,可是通常狀況下準確率高、召回率就低,召回率低、準確率高,固然若是二者都低,那是什麼地方出問題了。通常狀況,用不一樣的閥值,統計出一組不一樣閥值下的精確率和召回率,以下圖:

 

 

若是是作搜索,那就是保證召回的狀況下提高準確率;若是作疾病監測、反垃圾,則是保準確率的條件下,提高召回。

因此,在二者都要求高的狀況下,能夠用F1來衡量。

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

 

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

 

AP和mAP(mean Average Precision)

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

 

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

從中咱們能夠 發現一點,若是一個系統的性能較好,其曲線應當儘量的向上突出。

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

最理想的系統, 其包含的面積應當是1,而全部系統的包含的面積都應當大於0。這就是用以評價信息檢索系統的最經常使用性能指標,平均準確率mAP其規範的定義以下:(其中P,R分別爲準確率與召回率)

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


:Recall,又稱「查全率」——仍是查全率好記,也更能體現其實質意義。
準確率


「召回率」與「準確率」雖然沒有必然的關係(從上面公式中能夠看到),在實際應用中,是相互制約的。要根據實際需求,找到一個平衡點。
當 咱們問檢索系統某一件事的全部細節時(輸入檢索query查詢詞),Recall指:檢索系統能「回憶」起那些事的多少細節,通俗來說就是「回憶的能 力」。「能回憶起來的細節數」 除以 「系統知道這件事的全部細節」,就是「記憶率」,也就是recall——召回率。簡單的,也能夠理解爲查全率。

________________________________________________________________

在人工智能中,混淆矩陣(confusion matrix)是可視化工具,特別用於監督學習,在無監督學習通常叫作匹配矩陣。

若有150個樣本數據,這些數據分紅3類,每類50個。分類結束後獲得的混淆矩陣爲:

  
預測
類1
類2
類3
實際
  
類1
43
5
2
類2
2
45
3
類3
0
1
49
每一行之和爲50,表示50個樣本,

第一行說明類1的50個樣本有43個分類正確,5個錯分爲類2,2個錯分爲類3

 


 

Precision表示被分爲正例的示例中實際爲正例的比例,precision=TP/(TP+FP)。即,一個二分類,類別分別命名爲1和2,Precision就表示在類別1中,分對了的數量佔了類別1總數量的多少;同理,也表示在類別2中,分對了的數量佔類別2總數量的多少。那麼這個指標越高,就表示越整齊不混亂。

Accuracy是咱們最多見的評價指標,accuracy = (TP+TN)/(P+N),這個很容易理解,就是被分對的樣本數除以全部的樣本數,一般來講,正確率越高,分類器越好。咱們最常說的就是這個準確率。--------------------- 做者:diligentlee 來源:CSDN 原文:https://blog.csdn.net/diligentlee/article/details/80020713 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索