標籤:

如何解釋召回率與準確率?


糾正下,精確率(precision)和準確率(accuracy)是不一樣的,題主問的應該是精確率與召回率之間的差別。

一.定義辨析

剛開始接觸這兩個概念的時候總搞混,時間一長就記不清了。

實際上非常簡單,精確率是針對我們預測結果而言的,它表示的是預測為正的樣本中有多少是真正的正樣本。那麼預測為正就有兩種可能了,一種就是把正類預測為正類(TP),另一種就是把負類預測為正類(FP),也就是

P  = frac{TP}{TP+FP}

召回率是針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確了。那也有兩種可能,一種是把原來的正類預測成正類(TP),另一種就是把原來的正類預測為負類(FN)。

R = frac{TP}{TP+FN}

其實就是分母不同,一個分母是預測為正的樣本數,另一個是原來樣本中所有的正樣本數。

在信息檢索領域,精確率和召回率又被稱為查准率查全率

查准率=檢索出的相關信息量 / 檢索出的信息總量

查全率=檢索出的相關信息量 / 系統中的相關信息總量

二.舉個栗子

假設我們手上有60個正樣本,40個負樣本,我們要找出所有的正樣本,系統查找出50個,其中只有40個是真正的正樣本,計算上述各指標。

  • TP: 將正類預測為正類數 40

  • FN: 將正類預測為負類數 20
  • FP: 將負類預測為正類數 10
  • TN: 將負類預測為負類數 30

準確率(accuracy) = 預測對的/所有 = (TP+TN)/(TP+FN+FP+TN) = 70%

精確率(precision) = TP/(TP+FP) = 80%

召回率(recall) = TP/(TP+FN) = 2/3

除此之外,還有ROC曲線,PR曲線,AUC等評價指標,可以參見我的博客:機器學習性能評估指標


這篇文章講的挺簡單的,很容易理解,鏈接:推薦系統評測指標

準確率召回率是廣泛用於信息檢索和統計學分類領域的兩個度量值,用來評價結果的質量。其中精度是檢索出相關文檔數與檢索出的文檔總數的比率,衡量的是檢索系統的查准率;召回率是指檢索出的相關文檔數和文檔庫中所有的相關文檔數的比率,衡量的是檢索系統的查全率

一般來說,Precision就是檢索出來的條目(比如:文檔、網頁等)有多少是準確的,Recall就是所有準確的條目有多少被檢索出來了。

正確率、召回率和 F 值是在魚龍混雜的環境中,選出目標的重要評價指標。不妨看看這些指標的定義先:

1. 正確率 = 提取出的正確信息條數 / 提取出的信息條數

2. 召回率 = 提取出的正確信息條數 / 樣本中的信息條數

兩者取值在0和1之間,數值越接近1,查准率或查全率就越高。

3. F值 = 正確率 * 召回率 * 2 / (正確率 + 召回率) (F 值即為正確率和召回率的調和平均值)

不妨舉這樣一個例子:某池塘有1400條鯉魚,300隻蝦,300隻鱉。現在以捕鯉魚為目的。撒一大網,逮著了700條鯉魚,200隻蝦,100隻鱉。那麼,這些指標分別如下:

正確率 = 700 / (700 + 200 + 100) = 70%

召回率 = 700 / 1400 = 50%

F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

不妨看看如果把池子里的所有的鯉魚、蝦和鱉都一網打盡,這些指標又有何變化:

正確率 = 1400 / (1400 + 300 + 300) = 70%

召回率 = 1400 / 1400 = 100%

F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%

由此可見,正確率是評估捕獲的成果中目標成果所佔得比例;召回率,顧名思義,就是從關注領域中,召回目標類別的比例;而F值,則是綜合這二者指標的評估指標,用於綜合反映整體的指標。

當然希望檢索結果Precision越高越好,同時Recall也越高越好,但事實上這兩者在某些情況下有矛盾的。比如極端情況下,我們只搜索出了一個結果,且是準確的,那麼Precision就是100%,但是Recall就很低;而如果我們把所有結果都返回,那麼比如Recall是100%,但是Precision就會很低。因此在不同的場合中需要自己判斷希望Precision比較高或是Recall比較高。如果是做實驗研究,可以繪製Precision-Recall曲線來幫助分析。


數據集中 : 正例 反例

你的預測 正例 : A B

你的預測 反例 : C D

準確率就是A/(A+B) 大白話就是「你的預測有多少是對的」

召回率就是A/(A+C) 大白話就是「正例里你的預測覆蓋了多少」



看外國小伙如何用女票炸裂理論解釋準確率與召回率,單身狗勿入

先來一個標準版的解釋:

- TP,True Positive

- FP,False Positive

- TN,True Negative

- FN,False Negative

精確率:precision = TP / (TP + FP)

召回率:recall = TP / (TP + FN)

準確率:accuracy = (TP + TN) / (TP

+ FP + TN + FN)

F1 Score:F1 Score = P*R/2(P+R),其中P和R分別為 precision 和

recall

附上wiki的圖:

理解了木有?理解了就別往下看了

迷糊了?那你留下來是看答案的還是看女票炸裂理論的?

為了避免使用那些晦澀難懂的專有名詞(TN/TP/FN/FP),外國小伙(Supasate Choochaisri )開始用女票炸裂理論來解釋這個問題:

為了配圖,還真從度娘那找了張神奇的來:

假設你的女票在過去10年(還沒修成正果?)里,每年都會送一份生日禮物給你,有一天,她突然問你:

「記得這十年里你生日我都送過什麼嗎?」

這不是一個簡單的問題,或者說這不是一個問題,這就是一顆雷

為了續命,你隨即對自己的大腦進行了地毯式搜索,

這時,召回率(Recall)就等於你回答正確的禮物數和你女票在你生日時送你的禮物數的總和的比值:

比如,你準確地回答出10件禮物,那麼召回率就為:10/10即100%

如果只準確地回憶起了7件,那麼召回率(Recall)就是70%

但是,你所有的回答中可能有錯誤回答,比如,你一共給出了15個答案,其中5個是錯的,這證明,你雖然可以回答出所有禮物,但是卻不那麼精確,因此,精確率這個概念便出現了:

精確率(Precision)就是10/15,約為67%

對比一下:

也就是說,儘管你給出了所有的答案,但是你總共回答了15次,雖然100%召回了,但是精確率只有66.67%,如果你回答了不止15次呢,如果是100次呢?(還是買彩票去吧)想一下女票氣得要炸裂的表情吧,你命不久矣,也就說,精確率太低,就算召回率是100%,女票眼裡,你也已經是dead meat了。

演算法也是一樣,可以百分百召回的演算法不一定是最優演算法,因此,F1

Score就顯得尤為重要,F1 Score就是精確率與召回率的調和平均數(Harmonic

mean),這個有興趣的童鞋可以去看看https://en.wikipedia.org/wiki/F1_score,在此不做展開了。

-------------------------

作者: @Allie

歡迎關注 @矽谷密探 :)


如果你說的是recall和precision

假設一共有10篇文章,裡面4篇是你要找的。根據你某個演算法,你認為其中有5篇是你要找的,但是實際上在這5篇裡面,只有3篇是真正你要找的。

那麼你的這個演算法的precision是3/5=60%,也就是,你找的這5篇,有3篇是真正對的

這個演算法的recall是3/4=75%,也就是,一共有用的這4篇裡面,你找到了其中三篇。

請自行歸納總結。


首先來做一個總結:

精確率是針對我們預測結果而言的,它表示的是預測為正的樣本中有多少是真正的正樣本。

召回率是針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確了。

用公式表達如下:

上面還是有點抽象,下面通過例子來解釋一下上面說法:

準確率(P值)

假設我此時想吃香蕉,實驗室裡面每天都會安排10個水果,水果種類分別是6個香蕉,3個橘子,1個菠蘿。哎,但是,實驗室主任搞事情啊,為了提高我們吃水果的動力與趣味,告訴我們10個水果放在黑盒子中,每個人是看不到自己拿的什麼,每次拿5個出來,哎,我去抽了,抽出了2個香蕉,2個橘子,1個菠蘿。

下面我們來分別求求P值,R值,F值,哈哈!

按照一開始說的,精確率是針對我們預測結果而言的,它表示的是預測為正的樣本中有多少是真正的正樣本。

這裡我們的正樣本就是我想吃的香蕉!

在預測結果中,有2個香蕉,總個數是我拿的5個,那麼P值計算如下:

P = 2/5

召回率(R值)

按照開始總結所說。

召回率是針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確了。

我們這裡的正類是我想吃的香蕉,而在樣本中的香蕉個數是6個,召回率的召回也可以這麼理解,代表了,原始樣本中正類召回了多少。R值計算如下:

R = 2/6

分母已經變成了樣本中香蕉的個數啦

F值

可能很多人就會問了,有了召回率和准去率這倆個評價指標後,不就非常好了,為什麼要有F值這個評價量的存在呢?

按照高中語文老師所說的,存在即合理的說法,既然F值存在了,那麼一定有它存在的必要性,哈哈哈哈!

我們在評價的時候,當然是希望檢索結果Precision越高越好,同時Recall也越高越好,但事實上這兩者在某些情況下有矛盾的。

比如極端情況下,在我們這個例子中,我們只搜索出了一個結果,且是香蕉,那麼Precision就是100%,但是Recall為1/6就很低;而如果我們抽取10個水果,那麼比如Recall是100%,但是Precision為6/10,相對來說就會比較低。

因此P和R指標有時候會出現的矛盾的情況,這樣就需要綜合考慮他們,最常見的方法就是F-Measure,通過計算F值來評價一個指標!

我這裡給出最常見的F1計算方法,如下:

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

F那麼在我們這個例子中F1 = (2*2/5*2/6)/(2/5+2/6)(這裡我就不算出來了,有這個形式,更加能體現公式特點!)

希望對大家理解有所幫助~

參考:

推薦系統評測指標-準確率(Precision)、召回率(Recall)、F值(F-Measure) | 書影博客

文章地址:談談召回率(R值),準確率(P值)及F值 - 知乎專欄


關於TP、TN、FP、FN怎麼記?

第一個字母表示判斷對了沒,對了就是T錯了就是F;第二個字母表示判斷成什麼了,判斷成正樣本就是P、判斷成負樣本就是N;

準確率就是看判斷的對不對,無論是正樣本還是負樣本只要判斷對了就是準確的,所以計算公式中分子是T開頭的樣本和,分母是所有樣本。(TP+TN)/(TP+TN+FP+FN);

召回率可以通過搜索的例子來理解:你在百度輸入前端開發,假如百度的資料庫裡邊有100條記錄與前端開發相關,但是百度給你返回了80條記錄,其中只有40條是真正相關的(TP),其他都是不相關的(FP),40條真正相關的就是召回的,因此 返回的真正相關的記錄 / 所有相關的記錄(被正確判斷為正樣本+被錯誤判斷成負樣本) 就是召回率,也就是TP / (TP+FN)


這些概率是從英文過來的:準確率(Accuracy),精確率(Precision),召回率(Recall)

舉個例子:壞手機召回

準確率是你的全部判斷有多準確,無論判斷手機是否壞,準確率有多少。

精確率是你說對的那部分有多精準,你判斷出是壞手機的這部分有多精準。

召回率:壞手機召回,對真正壞的手機的召回率。

總結:

要先定出正樣品(壞手機)

準確率:總體準確率

精確率:你選出的正樣品準確率

召回率:實際正樣品被選出的比例。

T:實際正樣品

P:你判斷(檢測出來)的正樣品

準確率=T/All

精準率=TP/P

召回率=TP/T


周末在家回憶一周的工作內容,一共想起來5件事情,但實際只有4件是我這周做的,另1件其實是我之前完成的,那記憶的準確率為4/5=80%。

後來翻了翻筆記本,發現這周我其實做了6件事,我只正確的記住了4件,那大腦的召回率為4/6 = 66.7%。

召回率:Recall,又稱「查全率」;

準確率:Precision,又稱「精度」、「正確率」。

在一個大規模數據集合中檢索文檔時,可把集合中的所有文檔分成四類:(一個2×2的矩陣)

相關 不相關

檢索到 A B

未檢索到 C D

準確率:檢索到的相關文檔 比 所有被檢索到的文檔

召回率:檢索到的相關文檔 比 庫中所有的相關文檔


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

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


你對你的前任回憶起來的有多少是對的就是準確率precison,當然你還有沒回憶(recall)起來的。回憶起來的佔總體回憶的比例就是召回率recall。中文翻譯略坑。


理解清楚這兩個名詞前需要先明確自己的期望是什麼。比如一個預測系統,當預測值超過一定範圍那麼需要報警,這裡我們希望得到的是預測報警的情況也確實是應該報警的

有了這個前提,就可以得出如下矩陣:

【確實應該報警】 | 【確實不應該報警】

【預測應該報警】 TP(正確預測) | FP(報假警)

【預測不應該報警】 FN(該報而沒報) | TN(正確預測)

這樣:

準確率(precision) = TP(正確預測) /(TP+FP),也就是你誤報的多不多

召回率(recall) = TP(正確預測) /(TP+FN),也就是你該報而沒報的多不多


誤報率和漏報率


一個是真對的被檢出來多少,和所有真對的比——召回率;一個是檢索程序說是對的,其中有多少是真對的——準確率


召回率與準確率概念我也是剛搞懂,我是主要困擾在如何畫召回率-準確率曲線。其實召回率通俗說是查全率,即你可以通過設置概率閾值來創造0.1-1的查全率,設想將概率閾值設置為0.1則此時肯定大部分的正樣本都能被檢測出來。而設置成1,則很少甚至是0正樣本被檢出。在你的閾值被設置成1的時候,此時召回率必定極低,如果能夠檢測出來一個正樣本則顯然這個檢測的準確率必然為100%(在保證模型設計不出錯的情況下)。所以,在召回率-準確率曲線上,曲線往右側發展時,是緩慢下降的。當召回率不管在哪個點,準確率均為1時,此時的檢測性能為理想的完美狀態。

再擴展一點,今天寫論文時候的一些想法,在論文中你設置應用場景與不設置論文場景的區別。在一般的純學術研究,純演算法和模型研究中,如果你要驗證你的演算法性能,你必然要將這種演算法的各種應用範圍的性能考慮在內,但是你不可能列舉所有的情況在論文上,此時使用特定閾值設定特定的召回率成為必要的,設想不同的應用場景下要求的召回率和準確率必然不同,例如在返回搜索結果的問題上,你肯定要保證你的召回率,不能讓正確的結果流失,即使準確率偏低,但是你的大部分準確結果依然包含在搜索結果中,至於正確與否則可以讓用戶更細緻分辨。而在一般的發垃圾郵件的識別中,你肯定要保證你識別的垃圾郵件的準確率,免得用戶的重要郵件被判定為垃圾郵件,收進垃圾箱。在保證準確率的同時儘力的多識別出垃圾郵件,提升召回率。

上面說的這一點擴展到論文的過程中,一般的實踐類論文,你可以通過設置自己的應用場景,確定閾值設定,在這個設定下完成自己模型的性能調整,也就是說此時你已經確定你的召回率的要求,則接下來主要調整自己的準確率。在學術性較強的創新方法論文中則須畫出完整的召回率-正確率曲線

啰嗦了一大堆,就是自己的一些想法,分享給學習這個問題的朋友,如有不足歡迎批判,畢竟只是剛剛理解這個意思。


寧可錯殺,不可放過:低準確,高召回。

寧可放過一個壞人,也絕不冤枉一個好人:高準確,低召回。


一般定義一個評估模型,考慮以下指標:

真正(TP):分到類A且真的屬於類A的實例數量 ;

真負(TN):沒有分到類A且真的不屬於類A的實例數量;

假正(FP):分到類A但不屬於類A的實例數量;

假負(FN):沒有分到類A但屬於類A的實例數量;

精確度=(TP+TN)/(TP+TN+FP+FN)

準確率=TP/(TP+FP)

是一種在分樣本到類A中犯錯誤的指標

召回率=TP/(TP+FN)

衡量沒有留下本應該劃分到類中的樣本程度


一個很簡單的例子:

你用演算法將總體用戶的正確率提升了5%, 這是準確率。

但只有準確率提升不一定是好事,有可能原先預測正確的用戶現在預測錯了,實際產品開發中這類用戶也需要注意到。這就是召回率衡量的東西。


哈哈哈哈啊哈哈


推薦閱讀:

你有哪些時候能力突然增強?說明例子和進行原因分析?
0x5f3759df這個快速開方中的常數的數學依據是什麼?
學了一點 C 語言,下一步應該學什麼?
怎樣衡量一個機器學習工程師對演算法的掌握程度?
如何對遊戲伺服器全服玩家進行排名?

TAG:演算法 |