[机器学习] 二分类模型评估指标---精确率Precision、召回率Recall、ROC|AUC
一 為什么要評估模型?
?一句話,想找到最有效的模型.模型的應用是循環迭代的過程,只有通過持續調整和調優才能適應在線數據和業務目標. 選定模型時一開始都是假設數據的分布是一定的,然而數據的分布會隨著時間的移動而改變,這種現象稱為分布漂移(Distribution Drift)。驗證指標可以對模型在不斷新生的數據集上進行性能跟蹤。當性能開始下降時,說明該模型已經無法擬合當前的數據了,因此需要對模型進行重新訓練了。 模型能夠擬合新的數據稱為模型的泛化能力。
二 怎么檢驗和評估模型?
機器學習過程分為原型設計階段(Prototyping)與應用階段(Deployed), 其中有原型設計階段(Prototyping)的離線評估與應用階段(Deployed)的在線評估(online evaluation).
Prototyping階段是使用歷史數據訓練一個適合解決目標任務的一個或多個機器學習模型,并對模型進行驗證(Validation)與離線評估(Offline evaluation),然后通過評估指標選擇一個較好的模型。我們上面的例子就是Prototyping.
Deployed階段是當模型達到設定的指標值時便將模型上線,投入生產,使用新生成的在線數據來對該模型進行在線評估(Online evaluation),在線測試不同于離線測試,有著不同的測試方法以及評價指標。最常見的便是A/B testing,它是一種統計假設檢驗方法。
離線評估和在線評估采用不同的評估指標,在對模型進行離線評估時是采用偏經驗誤差的方法,在在線評估時會采用業務指標,如設備使用效率(OEE), 用戶點擊率等. 通過檢驗和評估可能選擇單一模型,也能使用多個模型混合.那到底怎么選呢?
三 評估指標 (Evaluation Matrics)是什么?
評估指標是把"尺子",用來評判模型優劣水平的算法,不同的機器學習模型有著不同的"尺子",同時同一種機器學習模型也可以用不同的尺子來評估,只是每個尺子的的著重點不同而已。對于分類(classification)、回歸(regression)、排序(ranking)、聚類(clustering)、推薦(recommendation),很多指標可以對其進行評價,如精確率-召回率(precision-recall),可以用在分類、推薦、排序等中.以下是各類"尺子"的定義,用到時才看,僅供參考.
錯誤率,精度,誤差的基本概念:
- ???? 錯誤率(error rate)= a個樣本分類錯誤/m個樣本
- ? 精度(accuracy)= 1 -錯誤率
- ? 誤差(error):學習器實際預測輸出與樣本的真是輸出之間的差異。
- ? 訓練誤差(training error):即經驗誤差。學習器在訓練集上的誤差。
- ? 泛化誤差(generalization error):學習器在新樣本上的誤差。
分類器評估指標
對于二分類問題,可將樣例根據其真實類別和分類器預測類別劃分為:
- 真正例(True Positive,TP):真實類別為正例,預測類別為正例。
- 假正例(False Positive,FP):真實類別為負例,預測類別為正例。
- 假負例(False Negative,FN):真實類別為正例,預測類別為負例。
- 真負例(True Negative,TN):真實類別為負例,預測類別為負例。
記憶訣竅是 :這 4 個定義由兩個字母組成:
-
第 1 個字母表示算法預測正確或者錯誤,即 True、False 描述的是這個分類器是否判斷正確。
-
第 2 個字母表示算法預測的結果,即 Positive、Negative 是這個分類器的分類結果。
P = TP + FN :所有 "實際為正例" 的樣本數
N = FP + TN :所有 "實際 為負例" 的樣本數
P~ = TP + FP :所有 "預測為正例" 的樣本數
N~ = TN + FN :所有 "預測為負例" 的樣本數
?
3.1 混淆矩陣
、介紹這些概念之前先來介紹一個概念:混淆矩陣(confusion matrix)。對于 k 元分類,其實它就是一個k x k的表格,用來記錄分類器的預測結果。對于常見的二元分類,它的混淆矩陣是 2x2 的。
假設要對 15 個人預測是否患病,使用 1 表示患病,使用 0 表示正常。預測結果如下:
將上面的預測結果轉為混淆矩陣,如下:
上圖展示了一個二元分類的混淆矩陣,從該混淆矩陣可以得到以下信息:
-
樣本數據總共有 5 + 2 + 4 + 4 = 15 個
-
真實值為 1 并且預測值也為 1 的樣本有 5 個,真實值為 1 預測值為 0 的樣本有 2 個,真實值為 0 預測值為 1 的樣本有 4 個,真實值為 0 預測值也為 0 的樣本有 4 個。
二元分類問題可以獲得 True Positive(TP,真陽性)、False Positive(FP,假陽性)、 False Negative(FN,假陰性) 和 True Negative(TN,真陰性)。這四個值分別對應二元分類問題的混淆矩陣的四個位置。
小技巧:上面的這四個概念經常會被搞混淆(難道混淆矩陣的名稱就是這么來的?),這里有個小方法幫你記住它。在醫學上,一般認為陽性是患病,陰性是正常。所以只要出現“陽性”關鍵字就表示結果為患病,此外,陽性也分為真陽性和假陽性,從名稱就可以看出:真陽性表示確確實實的陽性,也就是說實際為陽性(患病),預測也為陽性(患病);假陽性表示不真實的陽性,也就是說實際為陰性(正常),預測為陽性(患病)。真陰性和假陰性也可以按照上面的方式來簡單理解。
很明顯,這里的 TP=5,FP=2,FN=4,TN=4。
?
3.2? 準確率 Accuracy
按照我們上文的定義:第 1 個字母表示算法預測正確或者錯誤,第 2 個字母表示算法預測的結果。
所以分母是全部四種數據;分子中第一個字母是 T 表示 "算法預測正確了"。
準確率有一個缺點,就是數據的樣本不均衡,這個指標是不能評價模型的性能優劣的。
假如一個測試集有正樣本999個,負樣本1個。我們設計的模型是個無腦模型,即把所有的樣本都預測為正樣本,那么模型的Accuracy為99.9%,看評價指標,模型的效果很好,但實際上模型沒有任何預測能力。
?
3.3 精準率 Precision
精確率(Precision): 就是預測正確的正例數據占預測為正例數據的比例。
按照我們上文的定義:第 1 個字母表示算法預測正確或者錯誤,第 2 個字母表示算法預測的結果。
所以分母中, TP表示 : 算法預測正確 & 預測的是正例,FP表示 : 算法預測錯誤 & 預測的是正例(實際是負例)
?
3.4 準確率 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。
比如大概可以類比成射箭,準確率要看你射中靶心的概率;精準率要看你射中的是靶心區域的哪個位置。
?
3.5 召回率 Recall
召回率(Recall) 通俗地講,就是預測為正例的數據占實際為正例數據的比例
按照我們上文的定義:第 1 個字母表示算法預測正確或者錯誤,第 2 個字母表示算法預測的結果。
所以分母中 TP+FN ,表示 “預測正確且預測為正樣本“ + “預測錯誤且預測為負樣本(實際是真實正例)“。即 所有 "實際為正例" 的樣本數
分子是:預測正確 且 被預測為正樣本。
?
召回率分類閾值較低。盡量檢測數據,不遺漏數據,所謂的寧肯錯殺一千,不肯放過一個。
我們看看英文解釋,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——召回率。
召回率的應用場景是:需要盡可能地把所需的類別檢測出來,而不在乎結果是否準確。
比如對于地震的預測,我們希望每次地震都能被預測出來,這個時候可以犧牲precision。假如一共發生了10次地震,我們情愿發出1000次警報,這樣能把這10次地震都涵蓋進去(此時recall是100%,precision是1%),也不要發出100次警報,其中有8次地震給預測到了,但漏了2次(此時recall是80%,precision是8%)。
?
3.6 精準率 VS 召回率
召回率是覆蓋面的度量,度量有多個真實正例被預測為正例。精度是精確性的度量,表示被預測為正例的示例中實際為正例的比例。
在不同的應用場景下,我們的關注點不同,例如:
-
在預測股票的時候,我們更關心**精準率**,即我們預測升的那些股票里,真的升了有多少,因為那些我們預測升的股票都是我們投錢的。
-
而在預測病患的場景下,我們更關注**召回率**,即真的患病的那些人里我們預測錯了情況應該越少越好,因為真的患病如果沒有檢測出來,結果其實是很嚴重的,之前那個無腦的算法,召回率就是 0。
在信息檢索中,準確率和召回率是互相影響的,雖然兩者都高是一種期望的理想情況,然而實際中常常是如果閾值較高,那么精準率會高,但是會漏掉很多數據;如果閾值較低,召回率高,但是預測的會很不準確。所以在實際中常常需要根據具體情況做出取舍,例如:
-
對一般搜索的情況是在保證召回率的情況下提升準確率,
-
而如果是疾病監測、反垃圾郵件等,則是在保證準確率的條件下,提升召回率。
有時候,需要兼顧兩者,那么就可以用F1值(F score):
正如下圖所示,F1的值同時受到P、R的影響,單純地追求P、R的提升并沒有太大作用。在實際業務工程中,結合正負樣本比,的確是一件非常有挑戰的事。
precision一定情況下反映了模型控制假陽 FP 個數的能力,Recall 值反映了正樣本的檢出率,F1 值綜合了兩方面。
其實 F1 score 是精準率和召回率的調和平均數,調和平均數的性質就是,只有當精準率和召回率二者都非常高的時候,它們的調和平均才會高。如果其中之一很低,調和平均就會被拉得接近于那個很低的數。
為什么?因為調和平均值上面是一個乘積,所以其更接近較小值,這樣查準率或查全率中哪個值較小,調和平均值就更接近這個值,這樣的測量指標更嚴格。
?
3.6.1 為什么準確率和召回率是互相影響
首先說大致原理
-
recall和precision是相互矛盾的。如果想要更高的recall,那么就要讓模型的預測能覆蓋到更多的樣本,但是這樣模型就更有可能犯錯,也就是說precision會比較低。如果模型很保守,只能檢測出它很確定的樣本,那么其precision會很高,但是recall會相對低。
-
recall(TPR)的分母是樣本中正類的個數,因此樣本一旦確定,其分母即為定值,也就是說recall的變化隨分子增加而單調遞增;precision的分母是樣本中預測為正類的個數,其會隨著分類閾值的變化而變化,因此Precision的變化受TP和FP的綜合影響,不單調,變化情況不可預測。
?
4. ROC與AUC
????? 根據維基百科的描述,AUC(Area under the Curve of ROC)是ROC曲線下方的面積,是判斷二分類預測模型優劣的標準。ROC(receiver operating characteristic curve)接收者操作特征曲線。
? ? ? 是由二戰中的電子工程師和雷達工程師發明用來偵測戰場上敵軍載具(飛機、船艦)的指標,屬于信號檢測理論。ROC曲線的橫坐標是偽陽性率(也叫假正類率,False Positive Rate),縱坐標是真陽性率(真正類率,True Positive Rate),相應的還有真陰性率(真負類率,True Negative Rate)和偽陰性率(假負類率,False Negative Rate), AUC用于衡量“二分類問題”機器學習算法性能(泛化能力)。
我們知道,我們常用ACC準確率來判斷分類器分類結果的好壞,既然有了ACC為什么還需要ROC呢,很重要的一個因素是實際的樣本數據集中經常會出現數據偏斜的情況,要么負類樣本數大于正類樣本數,要么正類樣本數大于負類樣本數。使用AUC值作為評價標準是因為很多時候ROC曲線并不能清晰的說明哪個分類器的效果更好,而相對于AUC是個數值而言,對應AUC更大的分類器效果更好,數值更好判斷一些。
?
4.1. 概念解釋
True Positive,?False Positive,?True Negative,?False Negative
它們是根據真實類別與預測類別的組合來區分的.
假設有一批test樣本,這些樣本只有兩種類別:正例和反例。機器學習算法預測類別(左半部分預測類別為正例,右半部分預測類別為反例),而樣本中真實的正例類別在上半部分,下半部分為真實的反例。
樣本中的真實正例類別總數即TP+FN。True Positive Rate,TPR = TP/(TP+FN)。
同理,樣本中的真實反例類別總數為FP+TN。False Positive Rate,FPR=FP/(TN+FP)。
| ? | 預測 | 合計 | ||
| 1 | 0 | |||
| 實際
| 1 (P) | True Positive(TP) | False Negative(FN) | Actual Positive(TP+FN) |
| 0 (N) | False Positive(FP) | True Negative(TN) | Actual Negative(FP+TN) | |
| 合計 | Predicted Positive(TP+FP) | Predicted Negative(FN+TN) | TP+FP+FN+TN | |
截斷點
機器學習算法對test樣本進行預測后,可以輸出各test樣本對某個類別的相似度概率。
比如t1是P類別的概率為0.3,一般我們認為概率低于0.5,t1就屬于類別N。這里的0.5,就是”截斷點”。
總結一下,對于計算ROC,最重要的三個概念就是TPR, FPR, 截斷點。
截斷點取不同的值,TPR和FPR的計算結果也不同。將截斷點不同取值下對應的TPR和FPR結果畫于二維坐標系中得到的曲線
x軸與y軸的值域都是[0, 1],我們可以得到一組(x, y)的點,相連便作出了ROC曲線,示例圖如下:
- 縱坐標是true positive rate(TPR) ?= TP / (TP+FN=P) (分母是橫行的合計)直觀解釋:實際是1中,猜對多少
- 橫坐標是false positive rate(FPR) = FP / (FP+TN=N) ?直觀解釋:實際是0中,錯猜多少
圖中的虛線相當于隨機預測的結果。不難看出,隨著FPR的上升,ROC曲線從原點(0, 0)出發,最終都會落到(1, 1)點。ROC便是其右下方的曲線面積。下圖展現了三種AUC的值:
-
AUC = 1,是完美分類器,采用這個預測模型時,不管設定什么閾值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。
-
0.5 < AUC < 1,優于隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
-
AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
-
AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優于隨機猜測,因此不存在AUC < 0.5的情況
??????? AUC對于每一個做機器學習的人來說一定不陌生,它是衡量二分類模型優劣的一種評價指標,表示正例排在負例前面的概率。其他評價指標有精確度、準確率、召回率,而AUC比這三者更為常用。因為一般在分類模型中,預測結果都是以概率的形式表現,如果要計算準確率,通常都會手動設置一個閾值來將對應的概率轉化成類別,這個閾值也就很大程度上影響了模型準確率的計算。
?????? 我們不妨舉一個極端的例子:一個二類分類問題一共10個樣本,其中9個樣本為正例,1個樣本為負例,在全部判正的情況下準確率將高達90%,而這并不是我們希望的結果,尤其是在這個負例樣本得分還是最高的情況下,模型的性能本應極差,從準確率上看卻適得其反。而AUC能很好描述模型整體性能的高低。這種情況下,模型的AUC值將等于0(當然,通過取反可以解決小于50%的情況,不過這是另一回事了)
ROC 計算例子
from sklearn import metrics import numpy as npy = np.array([1, 1, 2, 2]) scores = np.array([0.1, 0.4, 0.35, 0.8]) fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2) print fpr print tpr print thresholds
通過計算,得到的結果(FPR,TPR,?截斷點)為
[ 0.?? 0.5? 0.5? 1. ]
[ 0.5? 0.5? 1.?? 1. ]
[ 0.8?? 0.4?? 0.35? 0.1 ]
?
將結果中的FPR與TPR畫到二維坐標中,得到的ROC曲線如下(藍色線條表示),ROC曲線的面積用AUC表示(淡黃色陰影部分)。
詳細計算過程
上例給出的數據如下:
y = np.array([1, 1, 2, 2]) scores = np.array([0.1, 0.4, 0.35, 0.8])用這個數據,計算TPR,FPR的過程是怎么樣的呢?
1. 分析數據
y是一個一維數組(樣本的真實分類)。數組值表示類別(一共有兩類,1和2)。我們假設y中的1表示反例,2表示正例。即將y重寫為:
y_true = [0, 0, 1, 1]?
score即各個樣本屬于正例的概率。
?
2. 針對score,將數據排序
| y[0] | 0.1 | N |
| y[2] | 0.35 | P |
| y[1] | 0.4 | N |
| y[3] | 0.8 | P |
3. 將截斷點依次取為score值
將截斷點依次取值為0.1,0.35,0.4,0.8時,計算TPR和FPR的結果。
3.1?截斷點為0.1
說明只要score>=0.1,它的預測類別就是正例。?
此時,因為4個樣本的score都大于等于0.1,所以,所有樣本的預測類別都為P。
TPR = TP/(TP+FN) = 1?
FPR = FP/(TN+FP) = 1
3.2?截斷點為0.35
說明只要score>=0.35,它的預測類別就是P。?
此時,因為4個樣本的score有3個大于等于0.35。所以,所有樣本的預測類有3個為P(2個預測正確,1一個預測錯誤);1個樣本被預測為N(預測正確)。
?
TPR = TP/(TP+FN) = 1?
FPR = FP/(TN+FP) = 0.5
3.3?截斷點為0.4
說明只要score>=0.4,它的預測類別就是P。?
此時,因為4個樣本的score有2個大于等于0.4。所以,所有樣本的預測類有2個為P(1個預測正確,1一個預測錯誤);2個樣本被預測為N(1個預測正確,1一個預測錯誤)。
TPR = TP/(TP+FN) = 0.5?
FPR = FP/(TN+FP) = 0.5
3.4?截斷點為0.8
說明只要score>=0.8,它的預測類別就是P。所以,所有樣本的預測類有1個為P(1個預測正確);3個樣本被預測為N(2個預測正確,1一個預測錯誤)。
scores = [0.1, 0.4, 0.35, 0.8] y_true = [0, 0, 1, 1] y_pred = [0, 0, 0, 1]?
TPR = TP/(TP+FN) = 0.5?
FPR = FP/(TN+FP) = 0
?
用下面描述表示TPR和FPR的計算過程,更容易記住
- TPR:真實的正例中,被預測正確的比例
- FPR:真實的反例中,被預測正確的比例
最理想的分類器,就是對樣本分類完全正確,即FP=0,FN=0。所以理想分類器FPR=0,TPR=1。
?
第一個點,(0,1),即FPR=0, TPR=1,這意味著FN(false negative)=0,并且FP(false positive)=0。Wow,這是一個完美的分類器,它將所有的樣本都正確分類。
第二個點,(1,0),即FPR=1,TPR=0,類似地分析可以發現這是一個最糟糕的分類器,因為它成功避開了所有的正確答案。
第三個點,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以發現該分類器預測所有的樣本都為負樣本(negative)。
第四個點(1,1),分類器實際上預測所有的樣本都為正樣本。經過以上的分析,我們可以斷言,ROC曲線越接近左上角,該分類器的性能越好。
??
?
總結
以上是生活随笔為你收集整理的[机器学习] 二分类模型评估指标---精确率Precision、召回率Recall、ROC|AUC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者法师符文怎么配
- 下一篇: B 树、B+ 树、B* 树