[白話解析] 經過實例來梳理概念 :準確率 (Accuracy)、精準率(Precision)、召回率(Recall)和F值(F-Measure)

[白話解析] 經過實例來梳理概念 :準確率 (Accuracy)、精準率(Precision)、召回率(Recall)和F值(F-Measure)

0x00 摘要

二分類評估是對二分類算法的預測結果進行效果評估。本文將構造出一個水泊梁山的具體實例帶領你們梳理相關概念。html

0x01 本文原因

筆者最近在研究Alink源碼,原本計劃分析二分類評估,結果打開Alink相關文檔發現裏面給出很多概念和公式。因而本文先帶領你們一塊兒複習/熟悉其中部分概念和公式,爲後續分析源碼打下良好的基礎。java

如下是Alink中 「二分類評估」 的說明。算法

  • 支持Roc曲線,LiftChart曲線,Recall-Precision曲線繪製。app

  • 流式的實驗支持累計統計和窗口統計。機器學習

  • 給出總體的評估指標包括:AUC、K-S、PRC, 不一樣閾值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。函數

這些概念基本都是評價指標,這是針對模型性能優劣的一個定量指標。一種評價指標只能反映模型一部分性能,若是選擇的評價指標不合理,那麼可能會得出錯誤的結論,故而應該針對具體的數據、模型選取不一樣的的評價指標。性能

接下來就分析梳理其中部分概念。學習

0x02 例子構建

  • 目標:由於在招安大計上,魯智深提出了反對意見,因此宋公明但願在梁山內部查找和魯智深有關聯的人。
  • 樣本全體:林沖,武松,史進,楊志,張青,孫二孃,呼延灼,關勝,石秀,楊雄。

宋江對蔣敬說:賢弟你是神算子,快幫哥哥想一想如何可以找出與大和尚有串聯的人,測試

蔣敬說:哥哥這個要求是 「二分類問題」(例如預測患或未患心臟病、股票漲或跌等這種只有兩類狀況的問題),裏面門道甚多,哥哥且聽我慢慢道來。.net

0x03 混淆矩陣

蔣敬說:首先小弟介紹的概念是混淆矩陣,這是一個 2 維方陣,它主要用於評估二分類問題的好壞。

3.1 四種分類狀況

針對一個二分類問題,即將實例分紅正類(positive)或負類(negative),在實際分類中會出現如下四種狀況:

  • TN (True Negative ):算法預測爲負例(N),實際上也是負例(N)的個數,即算法預測對了(True)。

  • FP (False Positive ):算法預測爲正例(P),其實是負例(N)的個數,即算法預測錯了(False)

    這裏指的是:實際爲負例但被分類器劃分爲正例的實例數。

  • FN (False Negative ):算法預測爲負例(N),其實是正例(P)的個數,即算法預測錯了(False)

    這裏指的是:即實際爲正例但被分類器劃分爲負例的實例數。

  • TP (True Positive ):算法預測爲正例(P),實際上也是正例(P)的個數,即算法預測對了(True)。

宋江道:如此說來,「與魯智深有關聯人」 就是 TP + FP了。

蔣敬說:哥哥誤會了,實際爲正例的樣本數應該是 TP + FN

這裏有個記憶訣竅聽小弟道來。

記憶訣竅是 :這 4 個定義由兩個字母組成:

  • 第 1 個字母表示算法預測正確或者錯誤,即 True、False 描述的是這個分類器是否判斷正確。
  • 第 2 個字母表示算法預測的結果,即 Positive、Negative 是這個分類器的分類結果。

因此再次澄清:

  • TP :預測爲正樣本,實際也是正樣本。
  • FP :預測爲正樣本,實際是負樣本。
  • FN :預測爲負樣本,實際是正樣本。
  • TN:預測爲負樣本,實際也是負樣本。
  • P = TP + FN :全部 "實際爲正例" 的樣本數
  • N = FP + TN :全部 "實際 爲負例" 的樣本數
  • P~ = TP + FP :全部 "預測爲正例" 的樣本數
  • N~ = TN + FN :全部 "預測爲負例" 的樣本數

3.2 混淆矩陣

混淆矩陣是把真實值和預測值相對應的樣本數量列出來的一張交叉表。這樣,全部正確的預測結果都在其對角線上,因此從混淆矩陣中能夠很直觀地看出哪裏有錯誤。

矩陣的每一行是樣本的預測分類,每一列是樣本的真實分類(反過來也能夠)。

預測值 0 (與魯智深無關聯) 預測值 1 (與魯智深有關聯)
真實值 0 (與魯智深無關聯) TN FP
真實值 1 (與魯智深有關聯) FN TP

記憶方法:真實值更重要,因此真實值處在第一個維度,就是行。

0x04 準確率 Accuracy

蔣敬說:小弟介紹的第二個概念是準確率 Accuracy。這 Accuracy 指的是預測正確的樣本數量佔總量的百分比。

4.1 公式

\[Accuray = \frac {TP + TN}{TP + TN + FP + FN} = \frac {TP + TN}{P + N} \]

按照咱們上文的定義:第 1 個字母表示算法預測正確或者錯誤,第 2 個字母表示算法預測的結果

因此分母是所有四種數據;分子中第一個字母是 T 表示 "算法預測正確了"。

4.2 特色

準確率有一個缺點,就是數據的樣本不均衡,這個指標是不能評價模型的性能優劣的。

假如一個測試集有正樣本99個,負樣本1個。咱們設計的模型是個無腦模型,即把全部的樣本都預測爲正樣本,那麼模型的Accuracy爲99%,看評價指標,模型的效果很好,但實際上模型沒有任何預測能力。

0x05 精準率 Precision

蔣敬說:小弟介紹的第三個概念是精準率,又稱爲查準率,就是 「預測爲正例" 的那些數據裏 "預測正確" 的數據個數。即在模型預測爲正樣本的結果中,真正是正樣本所佔的百分比。或者說是 在預測爲正樣本的結果中,有多少是準確的。

5.1 公式

\[Precision = \frac {TP}{TP + FP} \]

按照咱們上文的定義:第 1 個字母表示算法預測正確或者錯誤,第 2 個字母表示算法預測的結果

因此分母中, TP表示 : 算法預測正確 & 預測的是正例,FP表示 : 算法預測錯誤 & 預測的是正例(實際是負例)

5.2 特色

這個指標比較謹慎,分類閾值較高。

5.3 應用場景

須要儘量地把所需的類別檢測準確,而不在意這些類別是否都被檢測出來。好比對於罪犯的預測,咱們但願預測結果是很是準確的,即便放過了一些真正的罪犯,也不能錯怪一個好人

0x06 準確率 VS 精準率

宋江說,賢弟這兩個中文詞長得也太像太坑爹了,哥哥我很難區別。

蔣敬說:哥哥,這兩個詞是從英文翻譯過來的,咱慢慢推敲。

讓咱們看看其英文原意。

  • Accuracy在詞典中的定義是:the quality or state of being correct or precise
  • Precision在詞典中的定義是:the quality, condition, or fact of being exact and accurate

Accuracy首先是correct(正確),而precision首先是exact(精確,或者說確切)。首先準確,而後才談得上精確。一個結果必需要同時符合準確與精密這兩個條件,纔可算是精準。

這兩個詞也 有點相似 誤差(bias)與方差(variance)

  • 誤差(bias)反映了模型在樣本上的指望輸出與真實標記之間的差距,即模型自己的精準度,反映的是模型自己的擬合能力。這就很像 Precision。
  • 方差(variance)反映了模型在不一樣訓練數據集下學得的函數的輸出與指望輸出之間的偏差,即模型的穩定性,反應的是模型的波動狀況。這有點像 Accuracy。

宋江說,賢弟你這誤差,方差的,哥哥也聽着像天書。

蔣敬說:待小弟給哥哥找一個合適的例子。

好比大概能夠類比成咱射箭,準確率要看你射中靶心的機率;精準率要看你射中的是靶心區域的哪一個位置。

0x07 召回率 Recall

這是針對原始樣本而言的一個評價指標。召回率又稱爲查全率,就是在實際爲正樣本中,被預測爲正樣本所佔的百分比。 即全部正例中,有多少被正確地斷定爲正。

7.1 公式

\[recall= \frac {𝑇𝑃}{TP+FN} = \frac {𝑇𝑃}{All\,Real\,Positive} \]

按照咱們上文的定義:第 1 個字母表示算法預測正確或者錯誤,第 2 個字母表示算法預測的結果

因此分母中 TP+FN ,表示 「預測正確且預測爲正樣本「 + 「預測錯誤且預測爲負樣本(實際是真實正例)「。即 全部 "實際爲正例" 的樣本數

分子是:預測正確 且 被預測爲正樣本。

7.2 特色

召回率分類閾值較低。儘可能檢測數據,不遺漏數據,所謂的寧可錯殺一千,不願放過一個

咱們看看英文解釋,Recall : to remember sth; to make sb think of sth; to order sb to return; to ask for sth to be returned, often because there is sth wrong with it。

由於Recall有記憶的意思,因此能夠試着把 Recall 理解爲「記憶率」。就是記憶一個事件須要多少細節,這個細節就是當咱們問檢索系統某一件事的全部細節時(輸入檢索query),檢索系統能「Recall 回憶」起那些事的多少細節,通俗來說就是「回憶的能力」。能回憶起來的細節數 除以 系統知道這件事的全部細節,就是「記憶率」,也就是recall——召回率。

7.3 應用場景

召回率的應用場景是:須要儘量地把所需的類別檢測出來,而不在意結果是否準確。

好比對於地震的預測,咱們但願每次地震都能被預測出來,這個時候能夠犧牲precision。假如一共發生了10次地震,咱們情願發出1000次警報,這樣能把這10次地震都涵蓋進去(此時recall是100%,precision是1%),也不要發出100次警報,其中有8次地震給預測到了,但漏了2次(此時recall是80%,precision是8%)。

7.4 Sensitivity

sensitive = TP / P,表示的是全部正例中被分對的比例,衡量了分類器對正例的識別能力;能夠看到,sensitive和Recall是同樣的。

\[Sensitivity=\dfrac{TP}{TP+FN} \]

0x08 精準率 VS 召回率

宋江說,賢弟你給哥哥好好解釋下精準率 和 召回率這兩個概念

蔣敬說:待小弟慢慢道來。

8.1 概念區別

首先,用一個圖例來看看概念區別,圖中橢圓就是 「預測爲正類」 的樣本。也能看出兩個概念的定義。

8.2 關注點不一樣

召回率是覆蓋面的度量,度量有多個真實正例被預測爲正例。精度是精確性的度量,表示被預測爲正例的示例中實際爲正例的比例。

在不一樣的應用場景下,咱們的關注點不一樣,例如:

  • 在預測股票的時候,咱們更關心精準率,即咱們預測升的那些股票裏,真的升了有多少,由於那些咱們預測升的股票都是咱們投錢的。
  • 而在預測病患的場景下,咱們更關注召回率,即真的患病的那些人裏咱們預測錯了狀況應該越少越好,由於真的患病若是沒有檢測出來,結果實際上是很嚴重的,以前那個無腦的算法,召回率就是 0。

在信息檢索中,準確率和召回率是互相影響的,雖然二者都高是一種指望的理想狀況,然而實際中經常是若是閾值較高,那麼精準率會高,可是會漏掉不少數據;若是閾值較低,召回率高,可是預測的會很不許確。因此在實際中經常須要根據具體狀況作出取捨,例如:

  • 對通常搜索的狀況是在保證召回率的狀況下提高準確率,
  • 而若是是疾病監測、反垃圾郵件等,則是在保證準確率的條件下,提高召回率。
  • 有時候,須要兼顧二者,那麼就能夠用F-score指標。

8.3 爲何準確率和召回率是互相影響

宋江說,看到這裏,我就有一個疑問了,爲何準確率和召回率是互相影響的?

蔣敬說:這個問題比較複雜

首先說大體原理。

  • recall和precision是相互矛盾的。若是想要更高的recall,那麼就要讓模型的預測能覆蓋到更多的樣本,可是這樣模型就更有可能犯錯,也就是說precision會比較低。若是模型很保守,只能檢測出它很肯定的樣本,那麼其precision會很高,可是recall會相對低。
  • recall(TPR)的分母是樣本中正類的個數,所以樣本一旦肯定,其分母即爲定值,也就是說recall的變化隨分子增長而單調遞增;precision的分母是樣本中預測爲正類的個數,其會隨着分類閾值的變化而變化,所以Precision的變化受TP和FP的綜合影響,不單調,變化狀況不可預測。

8.3 實例說明

蔣敬說:具體用真實數聽說明最好,咱就真實操做下。

8.3.1 混淆矩陣

樣本全體:林沖,武松,史進,楊志,張青,孫二孃,呼延灼,關勝,石秀,楊雄。

這些好漢將會被分紅四類:

  • TP:查找到的,相關的 (搜到的也想要的)
  • FP:查找到的,可是不相關的 (搜到的但沒用的)
  • FN:未查找到的,但倒是相關的 (沒搜到,然而實際上想要的)
  • TN:未查找到的,也不相關的 (沒搜到也沒用的)

咱們再次看看混淆矩陣:

預測值 0 (與魯智深無關聯) 預測值 1 (與魯智深有關聯)
真實值 0 (與魯智深無關聯) TN FP
真實值 1 (與魯智深有關聯) FN TP

8.3.2 爲何要有召回率

首先咱們看,爲何要有召回率這個指標?

在梁山好漢中查找和魯智深有關聯的人。好比有18人和魯智深有關聯,90人和魯智深沒關聯。

咱們作個算法作預測:就是全部好漢都預測爲沒聯繫。這樣,90個確定預測對了,看着準確率很高。

可是這個算法對於「和魯智深有關聯的人」的預測準確率是0,因此這個算法是沒有任何意義的。

因此就要引入Recall。Recall就是在這18箇中能找出來的,好比找出12個,則recall = 66%。

8.3.3 分析

下面咱們回顧下定義:

  • 精準率(查準率)Precision = TP / (TP+FP) :查找到的相關好漢 / 全部被查找到的好漢。追求 精準率(查準率)意味着查找到的好漢中,相關的越多越好,不相關的越少越好
  • 召回率(查全率)Recall = TP / (TP+FN) :查找到的相關好漢 / 全體樣本中全部的相關好漢。追求 召回率(查全率)意味着樣本中的相關好漢,被查找到越多越好

爲何相互制約?

  • 因爲「查找策略」並不完美,但願更多相關的好漢被檢索到時,放寬「查找策略」時,每每也會伴隨出現一些不相關的結果,從而使準確率受到影響。
  • 而但願去除查找結果中的不相關好漢時,務必要將「查找策略」定的更加嚴格,這樣也會使有一些相關的好漢再也不能被查找到,從而使召回率受到影響。

8.3.4 原始「查找策略」

蔣敬首先定的 "查找策略"是:桃花山 + 軍官。這個容易理解,魯智深是在桃花山落草,且自己是提轄,可能和宋軍將領有私交。

獲得以下混淆矩陣

預測值 0 (與魯智深無關聯) 預測值 1 (與魯智深有關聯)
真實值 0 (與魯智深無關聯) TN 石秀,楊雄,裴宣,湯隆,劉唐,陶宗旺 FP 關勝,呼延灼
真實值 1 (與魯智深有關聯) FN 史進,楊春,陳達,周通 TP 武松,楊志,張青,孫二孃

因而推算出:

Precision = TP / (TP + FP) = 4 / (4 + 2) = 2/3

Recall = TP / (TP + FN)  = 4 / (4 + 4) = 1/2

8.3.5 追求召回率 / 放寬「查找策略」

宋江道:找到的相關人太少,咱們得提升召回率(查全率)。

追求 召回率(查全率)意味着樣本中全部相關的好漢,被查找到的越多越好,那就應該放寬「查找策略」。放寬「查找策略」時,每每也會伴隨出現一些不相關的結果,從而使準確率受到影響。

因而公明哥哥須要放寬「查找策略」 :少華山史大郎和魯智深之前結拜過;魯智深之前在"老種經略相公"麾下,种師道統帥陝西,因此魯智深可能和西北人有交往。

放寬後的 "查找策略" 是:桃花山 + 少華山 + 軍官 + 西北人(裴宣,湯隆,劉唐,陶宗旺)

因而獲得混淆矩陣是:

預測值 0 (與魯智深無關聯) 預測值 1 (與魯智深有關聯)
真實值 0 (與魯智深無關聯) TN 石秀,楊雄 FP 關勝,呼延灼,裴宣,湯隆,劉唐,陶宗旺
真實值 1 (與魯智深有關聯) FN 周通 TP 武松,楊志,張青,孫二孃,史進,楊春,陳達

因此獲得

Precision = TP / (TP + FP) = 7 / (7 + 6) = 7/13   ---- 下降

Recall = TP / (TP + FN)  = 7 / (7 + 1) = 7/8 ---- 提升

能夠看出來,但願提升TP,下降FN,因此放寬「查找策略」,致使FP也增長了

8.3.6 追求精準率 / 增強「查找策略」

宋江道:找到的相關人太多了,咱們得提升精準率。

但願 去除查找結果中的不相關好漢 。這時務必要將「查找策略」定的更加嚴格,這樣也會使有一些相關的好漢再也不能被查找到,從而使召回率受到影響。

因此要增強 "查找策略",新的 "查找策略"是:桃花山好漢中,男的。

因而獲得混淆矩陣是:

預測值 0 (與魯智深無關聯) 預測值 1 (與魯智深有關聯)
真實值 0 (與魯智深無關聯) TN 石秀,楊雄,裴宣,湯隆,劉唐,陶宗旺, 關勝,呼延灼 FP
真實值 1 (與魯智深有關聯) FN 周通,孫二孃,史進,楊春,陳達 TP 武松,楊志,張青

因此獲得

Precision = TP / (TP + FP) = 3 / (3 + 0) = 3/3 ---- 提升

Recall = TP / (TP + FN)  = 3 / (3 + 5) = 3/8 ---  下降

能夠看出來,但願提升TP,下降FP,因此增強「查找策略」,致使FN也增長了

0x09 F-Measure / F1 Score

宋江道:精準率和召回率看來是此消彼長的,這便如何是好?

蔣敬說:咱們有其餘指標能夠考慮,好比 F1 Score

在一些場景下要兼顧精準率和召回率,就有 F1 score。F1值就是精確值和召回率的調和均值。

9.1 公式

\[F1=\dfrac{2TP}{2TP+FP+FN}=\dfrac{2\cdot Precision \cdot Recall}{Precision+Recall} \]

9.2 特色

precision必定狀況下反映了模型控制假陽 FP 個數的能力,Recall 值反映了正樣本的檢出率,F1 值綜合了兩方面。

其實 F1 score 是精準率和召回率的調和平均數,調和平均數的性質就是,只有當精準率和召回率兩者都很是高的時候,它們的調和平均纔會高。若是其中之一很低,調和平均就會被拉得接近於那個很低的數

爲何?由於調和平均值上面是一個乘積,因此其更接近較小值,這樣查準率或查全率中哪一個值較小,調和平均值就更接近這個值,這樣的測量指標更嚴格。

記憶方法:金龍魚調和油。

9.3 應用場景

在precision和recall二者要求一樣高的狀況下,能夠用F1來衡量。

0x10 TPR,FPR,TNR,FNR

最後介紹個四胞胎,他們長得特別容易混淆。

真正率 True Positive Rate,TPR = TP / (TP+FN);

刻畫的是被分類器正確分類的正實例佔全部正實例的比例。即全部正例中,有多少被正確地斷定爲正。咱們能看到 TPR 就等於sensitivity

假陽性率 / 假正率 False Positive Rate,FPR = FP / (TN+FP);

刻畫的是在全部實際爲負類的樣本中,預測錯誤的比例,即全部負例中,有多少被錯誤地斷定爲正。在醫學上又稱誤診率(沒有病的人被檢測出有病),等於 1 - 特異性(Specificity)

真負率 True Negative Rate, TNR= TN / N = 1 - FPR;

刻畫的是被分類器正確分類的負實例佔全部負實例的比例,也稱爲特異度(specificity)。衡量了分類器對負例的識別能力。

假陰性率 False Negative Rate,FNR = FN / (TP + FN);

這是在全部實際爲正類的樣本中,預測錯誤的比例,在醫學上又稱漏診率(有病的人沒有被檢測出來),等於 1 - 靈敏性(Sensitivity)

讓咱們經過一張表格來總結下

縮寫 中文名稱 等同 醫學意義
TPR 真正率 Sensitivity 越大越好,若是爲1意味着醫生醫術高明,診斷全對
FPR 假陽性率 1 - Specificity 誤診率(沒有病的人被檢測出有病)。越小越好
TNR 真負率 Specificity
FNR 假陰性率 1 - Sensitivity 漏診率(有病的人沒有被檢測出來)

這裏再介紹一個記憶訣竅

  • Sensitivity 這個詞有"過敏"的意思,和患病對應,這樣關聯起來比較好記。
  • Specificity 這個詞有"免疫"的意思,能和未患病相關聯,因此也很好記。

0x11 TPR vs FPR

TPR越大越好,FPR越小越好,但這兩個指標一般是矛盾的。爲了增大TPR,能夠預測更多的樣本爲正例,與此同時也增長了更多負例被誤判爲正例的狀況。

放在具體領域來理解上述兩個指標。如在醫學診斷中,判斷有病的樣本。

那麼儘可能把有病的揪出來是主要任務,也就是第一個指標TPR,要越高越好。

而把沒病的樣本誤診爲有病的,也就是第二個指標FPR,要越低越好。

不難發現,這兩個指標之間是相互制約的。若是某個醫生對於有病的症狀比較敏感,稍微的小症狀都判斷爲有病,那麼他的第一個指標應該會很高,可是第二個指標也就相應地變高。最極端的狀況下,他把全部的樣本都看作有病,那麼第一個指標達到1,第二個指標也爲1。

  • (TPR=1,FPR=0),爲完美分類,也就是這個醫生醫術高明,診斷全對。

  • (TPR > FPR),醫生的判斷大致是正確的。

  • (TPR = FPR), 中線上的點,也就是醫生全都是蒙的,蒙對一半,蒙錯一半;

  • (TPR < FPR),這個醫生說你有病,那麼你極可能沒有病,醫生的話咱們要反着聽,爲真庸醫。

與recall和precision相互矛盾不一樣,TPR和FPR呈正相關關係,也就是說TPR增大,FPR也會變大。咱們但願TPR可以越大越好(爲1),FPR越小越好(爲0),但這一般是不可能發生的。

0x12 參考

二分類算法的評價指標:準確率、精準率、召回率、混淆矩陣、AUC

分類算法評價指標詳解

召回率與準確率(Precision and Recall)

查全率(Recall),查準率(Precision),靈敏性(Sensitivity),特異性(Specificity),F1,PR曲線,ROC,AUC的應用場景

二分類評估指標F1 & AUC & LogLoss

ROC曲線與AUC

ROC曲線 vs Precision-Recall曲線

ROC曲線與AUC以及LIFT

機器學習中多分類模型的評估方法之--kappa係數

ROC、K-S 曲線、Lift 曲線、PR 曲線

二分類評估,從混淆矩陣提及

檢驗方法、混淆矩陣、模型評估

相關文章
相關標籤/搜索