1. 程式人生 > >[白話解析] 通過例項來梳理二分類評估概念 :ROC, AUC, Recall-Precision

[白話解析] 通過例項來梳理二分類評估概念 :ROC, AUC, Recall-Precision

# [白話解析] 通過例項來梳理概念 :準確率 (Accuracy)、精準率(Precision)、召回率(Recall)和F值(F-Measure) [TOC] ## 0x00 摘要 二分類評估是對二分類演算法的預測結果進行效果評估。本文將構造出一個水泊梁山的具體例項帶領大家梳理相關概念。 ## 0x01 本文緣由 筆者最近在研究Alink原始碼,本來計劃分析二分類評估,結果開啟Alink相關文件發現裡面給出不少概念和公式。於是本文先帶領大家一起復習/熟悉其中部分概念和公式,為後續分析原始碼打下良好的基礎。 以下是Alink中 “二分類評估” 的說明。 - 支援Roc曲線,LiftChart曲線,Recall-Precision曲線繪製。 - 流式的實驗支援累計統計和視窗統計。 - 給出整體的評估指標包括:AUC、K-S、PRC, 不同閾值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。 這些概念基本都是評價指標,這是針對模型效能優劣的一個定量指標。一種評價指標只能反映模型一部分效能,如果選擇的評價指標不合理,那麼可能會得出錯誤的結論,故而應該針對具體的資料、模型選取不同的的評價指標。 接下來就分析梳理其中部分概念。 ## 0x02 例子構建 - **目標**:因為在招安大計上,魯智深提出了反對意見,所以宋公明希望在梁山內部查詢和魯智深有關聯的人。 - **樣本全體**:林沖,武松,史進,楊志,張青,孫二孃,呼延灼,關勝,石秀,楊雄。 > 宋江對蔣敬說:賢弟你是神運算元,快幫哥哥想想如何能夠找出與大和尚有串聯的人, > > 蔣敬說:哥哥這個要求是 “二分類問題”(例如預測患或未患心臟病、股票漲或跌等這種只有兩類情況的問題),裡面門道甚多,哥哥且聽我慢慢道來。 ## 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 {