1. 程式人生 > >機器學習之效能度量指標

機器學習之效能度量指標

機器學習的模型效能度量指標

在機器學習中,衡量,評估和選擇一個模型好壞是通過一些常見指標實現的,稱之為效能指標(Metrics)。

對於一個二分類問題,我們首先給出如下基本指標基於這些指標可以推匯出其他指標:

  • :True Positive(真正, TP),即模型預測為正的正樣本個數(將正類預測為正類數)
  • :False Positive(假正, FP),即模型預測為正的負樣本個數(本來是負樣本,預測成了正樣本,將負類預測為正類數   誤報
  • :True Negative(真負 , TN),即模型預測為負的負樣本個數(將負類預測為負類數)
  • :False Negative(假負 , FN),即模型預測為負的正樣本個數(本來是正樣本,預測成了負樣本,將正類預測為負類數  漏報

從而有如下定義:

True Positive Rate(真正率 真陽性率 , TPR)或靈敏度(sensitivity) 
  TPR = TP /(TP + FN) 
  被預測為正的正樣本結果數 / 正樣本實際數(召回率)

True Negative Rate(真負率 真陰性率 , TNR)或特指度/特異性(specificity) 
  TNR = TN /(TN + FP) 
  被預測為負的負樣本結果數 / 負樣本實際數(負例的查全率/召回率)

False Positive Rate (假正率 假陰性率

, FPR) 
  FPR = FP /(TN + FP) 
  被預測為正的負樣本結果數 /負樣本實際數

False Negative Rate(假負率 假陽性率 , FNR) 
  FNR = FN /(TP + FN) 
  被預測為負的正樣本結果數 / 正樣本實際數

è¿éåå¾çæè¿°

錯誤率(error rate)和準確率(精度,正確率 accuracy)

首先介紹幾個常見的基本概念:

(1)一般來說,我們把學習器/分類器/模型的實際預測輸出與樣本真實輸出之間的差異稱之為誤差(error)。

(2)學習器在訓練集上的誤差稱之為訓練誤差(training error)或經驗誤差(empirical error)。

(3)訓練學習結束後的模型在測試集上的誤差稱之為測試誤差(testing error),其是對學習器的泛化誤差的評估,是泛化誤差的近似。

(4)在新樣本上的誤差稱之為泛化誤差(generalization error)。在新樣本上的預測能力也稱之為泛化效能過擬合,欠擬合)。

以下是常用的重要概念:

通常把分類錯誤的樣本數佔樣本總數的比例稱之為錯誤率(總體概念,不區分正負樣本)

把把分類正確的樣本數佔樣本總數的比例稱之為準確率(也稱之為精度,正確率,為了統一最好稱之為準確度),準確率=1-錯誤率。計算如下:

注意Acc是一個總體概念,表示了一個分類器的分類能力。注意,這裡的區分能力沒有偏向於是正例還是負例,這也是Accuracy作為效能指標最大的問題所在。

精確率和召回率(查準率和查全率)

精確率(precision):,可理解為“真正屬於類別C的/找到屬於類別C的”。即實際是正類並且被預測為正類的樣本佔所有預測為正類的比例,精確率更為關注將負樣本錯分為正樣本(FP)的情況,預測出的結果是否準確。

召回率(recall, sensitivity, true positive rate, TPR):,在醫學上常常被稱作敏感度(Sensitive)。可理解為“真正屬於類別C的/所有屬於類別C的”。即實際是正類並且被預測為正類的樣本佔所有實際為正類樣本的比例,召回率更為關注覆蓋率問題,是否將應該分類的正樣本目標全部分類。

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

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

可見,精確率和召回率是相互影響的,理想情況下兩者都高,但是一般情況下準確率高,召回率就低;召回率高,準確率就低;如果兩者都低,應該是哪裡算的有問題。

在資訊檢索領域,精確率和召回率又被稱為查準率查全率

查準率=檢索出的相關資訊量 / 檢索出的資訊總量

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

注意:一定要區分精確度和上一節中的準確率。在網路安全領域更注重漏報率和誤報率,也就是精確率和召回率。在正負樣本不平衡的情況下,準確率這個評價指標有很大的缺陷和片面性。比如在網際網路廣告裡面,點選的數量是很少的,一般只有千分之幾,如果用acc,即使全部預測成負類(不點選)acc 也有 99% 以上,沒有意義。

F1 score

在精確率和召回率兩者都要求高的情況下,綜合衡量P和R就用F1值。F1是精確率和召回率的調和均值,精確率和準確率都高的情況下,值也會高。

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

有的時候,我們對recall 與 precision 賦予不同的權重,表示對分類模型的查準率/查全率的不同偏好:綜合評價指標F-measure。

Precision和Recall指標有時候會出現的矛盾的情況,這樣就需要綜合考慮他們,最常見的方法就是F-Measure(又稱為F-Score)。F-Measure是Precision和Recall加權調和平均:

其中β>0度量了查全率對查準率的相對重要性。可以看到β為1時,該公式就是F1值(F1 score)。 反映了模型分類能力的偏好,β>1時查全率有更大影響;β<1時查準率有更大影響。 β越大的時候,precision的權重更大,我們希望precision 越小,而recall 應該越大,說明模型更偏好於提升recall,意味著模型更看重對正樣本的識別能力; 而 β小的時候,recall 的權重更大,因此我們希望recall越小,而precision越大,模型更偏好於提升precision,意味著模型更看重對負樣本的區分能力。

在一些應用中,對查準率和查重率的重視程度不同。例如在商品推薦系統中,為了儘可能少打擾使用者,更希望推薦內容確是使用者感興趣的,此時查準率更重要;而在逃犯資訊檢索系統中,更希望儘可能少漏掉逃犯,此時查全率更重要。此時可以通過調節β引數來實現。

F1度量平衡了precision和negative,是調和平均,而Fβ則是加權調和平均。與算術平均和幾何平均相比,調和平均更重視較小值。原因是調和平均會在P和R相差較大時偏向較小的值,是最後的結果偏差,比較符合人的主觀感受。

一般多個模型假設進行比較時,F1 score越高,說明它越好。很多推薦系統的評測指標就是用F1值的。

P-R圖

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

可以根據學習器的預測結果對樣例進行排序,排在前面的是學習器認為最有可能是正例的樣本,排在最後的則是學習器認為最不可能是正例的樣本。按此順序逐個把樣本作為正例進行預測,則每次可以計算出當前的查全率和查準率。以查全準為縱軸,查全率為橫軸作圖,得到P-R曲線,顯示該曲線的圖稱為P-R圖。

å¾2

現實任務中P-R曲線常是非單調,不平滑的,在很多區域性有上下波動。

P-R圖直觀的顯示出學習器在樣本總體上的查全率和查準率,在進行比較時,若一個學習器的PR曲線被另一個學習器的PR曲線完全包住,則可以斷言後者的效能優於前者(如圖中A優於C)。如果兩個學習器發生了交叉,則難以斷言孰優孰劣,只能在具體的查準率或查全率條件下進行比較(如圖中A和B)。如果一定要比較A和B孰優孰劣,一個合理的比較依據是比較PR曲線下面積的大小。在一定程度上表徵了學習器在查準率和查全率上取得“雙高”的比例,但這個值不太容易估算。所以設計了一些綜合考慮查準率和查全率的效能度量。比如“平衡點”(Break-Even Point,REP),是“查準率=查全率”時的取值。例如學習器C的BEP是0.64,,基於BEP比較,可認為學習器A優於B。但是BEP較簡單。上述的F1則更準確。

混淆矩陣

混淆矩陣實際上就是上述TP FP TN FN的組合:

ROC和AUC

ROC定義

In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.

在很多學習器中,比如邏輯迴歸,樸素貝葉斯等。模型為預測樣本給出的是一個實值或概率預測值,然後將這個預測值與一個分閾值(threshold)進行比較。若大於閾值則分為正類,小於閾值分為負類。例如,神經網路在一般情況下對每一個預測樣本預測出一個[0.0, 1.0]之間的實值,然後將這個值與0.5比較,大於0.5則判為正例,否則為負例。這個實值或概率預測結果的好壞,直接決定了學習器的泛化能力。實際上,根據這個實值或概率預測結果,我們可將測試樣本進行排序,“最有可能”是正例的排到最前面,反之排到最後面。這樣,分類過程就相當於在這個排序中以某個“截斷點”(cut point)將樣本分為兩個部分,前一個部分判作正例,後一個部分則判作反例

在不同的應用任務中,我們可根據任務需求來採用不同的截斷點,例如若我們更重視“查準率”,則可選擇排序靠前的位置進行截斷;若更重視“查全率”,則選擇靠後的位置進行截斷。因此,排序本身的質量好壞,體現了綜合考慮學習器在不同的任務下的“期望泛化效能”的好壞。ROC曲線是從這個角度出發研究學習器泛化效能的有力武器。如果我們減小這個閥值,那麼更多的樣本會被識別為正類。這會提高正類的識別率,但同時也會使得更多的負類被錯誤識別為正類。為了形象化這一變化,在此引入 ROC ,ROC 曲線可以用於評價一個分類器泛化效能好壞

ROC繪製

ROC全稱是“受試者工作特徵”(Receiver Operating Characteristic)曲線。與上一節介紹的P-R曲線相似,我們根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作為正例進行預測,每次計算出兩個重要量的值,分別以它們為橫縱座標作圖,就得到了“ROC曲線”。與P-R曲線使用查準率、查全率為縱、橫軸不同,ROC曲線的縱軸是“真正例率”(TPR)橫軸是“假正例率”(FPR)。顯示ROC曲線的圖稱為“ROC圖”。對角線對應於隨機猜測模型。TPR 代表能將正例分對的概率,FPR 代表將負例錯分為正例的概率。在 ROC 空間中,每個點的橫座標是 FPR,縱座標是 TPR,這也就描繪了分類器在 TP(真正率)和 FP(假正率)間的 trade-off(與P-R曲線不同,FPR和TPR是正比關係,相互促進)。左下角的點所對應的是將所有樣例判為反例的情況,而右上角的點對應的則是將所有樣例判斷為正例的情況。為了畫出ROC曲線,分類器必須提供每個樣例被判為陽性或者陰性的可信程度值。(注意是概率值,可信程度y_pred_proba,而不是lable,y_pred)

  • 點(0,1):即FPR=0, TPR=1,意味著FN=0且FP=0,將所有的樣本都正確分類;
  • 點(1,0):即FPR=1,TPR=0,最差分類器,避開了所有正確答案;
  • 點(0,0):即FPR=TPR=0,FP=TP=0,分類器預測所有的樣本都為負樣本(negative);
  • 點(1,1):分類器實際上預測所有的樣本都為正樣本。

在實際中我們都是利用有限個測試樣例來繪製ROC圖,此時僅能獲得有限個(tpr, fpr)座標對,無法產生平滑的ROC曲線。

AUC定義

AUC(Area Under Curve)被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。

The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

翻譯過來就是隨機挑選一個正樣本以及一個負樣本,分類器判定正樣本的值高於負樣本的概率就是 AUC 值。AUC給出的是分類器的平均效能值,完美分類器的AUC為1.0,隨機猜測的AUC為0.5。AUC輸出的是該模型對隨機抽取的一個正樣本和一個負樣本,模型輸出正樣本的概率大於負樣本的概率有多大,所以AUC反映更多的是模型的排序能力,將類別為1 的樣本的概率排在類別為0的樣本的前面的概率。與閾值無關,只和模型有關。

簡單說:AUC值越大的分類器,正確率越高。

  • AUC = 1:完美分類器,採用這個預測模型時,不管設定什麼閾值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。
  • 0.5<AUC<1:優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
  • AUC=0.5:跟隨機猜測一樣(例:丟硬幣,50%猜測概率),模型沒有預測價值。
  • AUC<0.5:比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測,因此不存在AUC<0.5的情況。

AUC計算方法:

第一種方法:AUC為ROC曲線下的面積,那我們直接計算面積可得。面積為一個個小的梯形面積之和。計算的精度與閾值的精度有關。

第二種方法:根據AUC的物理意義,我們計算正樣本score大於負樣本的score的概率。取NM(N為正樣本數,M為負樣本數)個二元組,比較score,最後得到AUC。時間複雜度為O(NM)。

第三種方法:與第二種方法相似,直接計算正樣本score大於負樣本的概率。我們首先把所有樣本按照score排序,依次用rank表示他們,如最大score的樣本,rank=n(n=N+M),其次為n-1。那麼對於正樣本中rank最大的樣本,rank_max,有M-1個其他正樣本比他score小,那麼就有(rank_max-1)-(M-1)個負樣本比他score小。其次為(rank_second-1)-(M-2)。

總結

關於ROC曲線

  1)虛線所示直線隨機分類時的ROC曲線,一般畫到圖中作為參照。

  2)對於一個完美的分類器,ROC曲線應該是從(0,0)到(0,1),然後橫著連到(1,1)的折線。ROC曲線越接近左上角,分類效果越好。

  3)在進行學習器比較時,與PR圖相似。若一個學習器ROC曲線被另一個學習器的ROC曲線包住,則可以斷言後者的效能優於前者;若兩個學習器的ROC曲線發生交叉,則難以一般性的斷言兩者孰優孰劣。此時只能依據AUC進行比較。

  4)理想情況下,TPR應該接近1,FPR應該接近0。ROC曲線上的每一個點對應於一個threshold,對於一個分類器,每個threshold下會有一個TPR和FPR。比如Threshold最大時,TP=FP=0,對應於原點;Threshold最小時,TN=FN=1,對應於右上角的點(1,1)。

  5) P和N得分不作為特徵間距離d的一個函式,隨著閾值theta增加,TP和FP都增加。其實,我們並不一定要得到每個測試樣本是正樣本的概率值,只要得到這個分類器對該測試樣本的“評分值”即可(評分值並不一定在(0,1)區間)。評分越高,表示分類器越肯定地認為這個測試樣本是正樣本,而且同時使用各個評分值作為threshold。將評分值轉化為概率更易於理解一些。

關於AUC

  1)AUC表示曲線下面的面積,AUC的計算有兩種方式,梯形法和ROC AUCH法,都是以逼近法求近似值

  2)對於一個完美的分類器,AUC的值應該為1,對於一個隨機猜測分類器(即圖中虛直線),AUC的面積為0.5。AUC的取值範圍一般在0.5和1之間。使用AUC值作為評價標準是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。AUC面積越大,分類效果越好。

  3)首先AUC值是一個概率值,當你隨機挑選一個正樣本以及一個負樣本,當前的分類演算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值。當然,AUC值越大,當前的分類演算法越有可能將正樣本排在負樣本前面,即能夠更好的分類。AUC考慮的是樣本預測的排序質量。因此與排序誤差有緊密關係。

既然已經這麼多評價標準,為什麼還要使用ROC和AUC呢?因為ROC曲線有個很好的特性:因為ROC曲線有個很好的特性:當測試集中的正負樣本的分佈變化的時候,ROC曲線能夠保持不變。在實際的資料集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試資料中的正負樣本的分佈也可能隨著時間變化。(與P-R曲線相比)。

  • Motivation1:在一個二分類模型中,對於所得到的連續結果,假設已確定一個閥值,比如說 0.6,大於這個值的例項劃歸為正類,小於這個值則劃到負類中。如果減小閥值,減到0.5,固然能識別出更多的正類,也就是提高了識別出的正例佔所有正例 的比類,即TPR,但同時也將更多的負例項當作了正例項,即提高了FPR。為了形象化這一變化,引入ROC,ROC曲線可以用於評價一個分類器。

  • Motivation2:在類不平衡的情況下,如正樣本90個,負樣本10個,直接把所有樣本分類為正樣本,得到識別率為90%。但這顯然是沒有意義的。單純根據Precision和Recall來衡量演算法的優劣已經不能表徵這種病態問題

在上圖中,(a)和(c)為Roc曲線,(b)和(d)為Precision-Recall曲線。

(a)和(b)展示的是分類其在原始測試集(正負樣本分佈平衡)的結果,(c)(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果,可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線變化較大。

代價敏感錯誤率與代價曲線

不同的應用任務中我們的關注點通常不同,比如網路安全更關注誤報,因為大量的IDS誤報影響了網路安全管理員對安全事件的排查和檢測;而醫學更主要漏報。如果漏診,產生的後果可想而知。某些服務應用則如果因為誤報影響了正常使用者的體驗,則會大大影響服務的推廣應用。不同型別的錯誤所造成的後果不同,為權衡不同型別錯誤所造成的的不同損失,可為錯誤賦予“非均等代價”(unequal cost)。如下圖所示,正確判斷的代價顯然應該為0,錯誤判斷的代價之間的比值會影響我們對學習器的改造。 

å¾4

以二分類為例,我們可以根據任務的領域知識設定一個“代價矩陣”(cost matrix),體現的是錯誤預測的代價。一般情況下我們更關注代價比值,而不是絕對值。之前的學習器預設都是假設均等代價。有了非均等代價概念之後,我們希望最小化的是總體代價,從而有代價敏感錯誤率(cost-sensitive)

在非均值代價下,ROC曲線不能直接反映出學習器的期望總體代價,而“代價曲線”(cost curve)則可以達到目的。圍成的面積就是期望總體代價。

代價曲線的繪製: ROC曲線上每一點對應了代價平面上的一條線段,設ROC曲線上點的座標為(FPR,TPR),則可相應計算出FNR,然後在代價平面上繪製一條從(0,FPR)到(1,FNR)的線段。

å¾5

多分類效能指標

以上主要介紹的是分類,特別是二分類。對於多分類中我們可以用變形的某些上述指標去評估。

對於多分類問題,可以對每一類分別計算Precision、Recall和F1,綜合作為模型評價指標。

  • 錯誤率和精度
  • 多分類任務,兩兩類別的組合產生多個二分類精確度和召回率
  • 多分類任務,每兩兩類別的組合產生多個二分類混淆矩陣
  • 基於n個二分類混淆矩陣上綜合考慮查準率和查全率。如下。

(1)巨集查準率(macro-P),巨集查全率(macro-R),巨集F1(macro-F1)

一種做法是先在各個混淆矩陣上分別計算出查準率和查全率,再計算平均值。

(2)微查準率(micro-P),微查全率(micro-R),微F1(micro-F1)

還可以將各個混淆矩陣的對應元素進行平均,再基於這些平均值計算出查準率,查全率,F1等。

聚類效能指標

聚類效能度量也稱之為聚類“有效性指標”(validity index)。與監督學習的效能度量作用相似,對聚類結果,我們需要通過某種效能度量來評估其好壞;另一方面,若明確了最終將要使用的效能度量,則可以直接將其作為聚類過程的優化目標,從而更好地得到符合要求的聚類結果。

聚類是將樣本集劃分為若干個互不相交的子集,即樣本簇。我們希望同一個簇的樣本儘可能彼此相似,不同簇的樣本儘可能不同。也就是聚類結果的“簇內相似度”(intra-cluster similarity)高,且“簇間相似度”(inter-cluster similarity)低。具體來看,聚類效能度量大致分為兩類。一類是將聚類結果與某個“參考模型”(reference model)(例如將某個領域專家給出的劃分結果作為參考模型)進行比較,稱之為“外部指標”(external index);另一個類是直接考察聚類結果而不利用任何參考模型,稱為“內部指標”(internal index)

定義多個集合:SS, SD, DS, DD.

基於集合匯出了以下幾個常用的聚類效能度量外部指標:

  • Jaccard係數(Jaccard Coeffcient, JC)
  • FM係數(Fowlkes and Mallows Index, FMI)
  • Rand係數(Rand Index, RI)

上述效能度量結果值均在[0, 1]區間,值越大越好。

再給出常用的聚類效能度量內部指標:

  • DB係數(Davies-Bouldin Index, DBI)
  • Dunn指數(Dunn Index, DI)

DBI值越小越好,而DI則相反,值越大越好。

以上摘抄自西瓜書,詳細資訊可參考此書。

迴歸效能指標

對於迴歸問題效能評估可能與上述不太一樣了。我們可以表示誤差e表示真實曲線和擬合曲線的差值:

由誤差值匯出如下四個指標:

 SAE (Sum of Absolute Error)

MAE (Mean Absolute Error):平均絕對誤差,又被稱為範數損失(l1-norm loss)。

SSE (Sum of Squared Error) 

MSE (Mean Squared Error) 其中均方誤差最常用,其表示引數估計值與引數真實值之差的平方的期望值。同時還有均方根誤差:

均方根誤差 = 標準誤差 = 均方誤差^(1/2)

平均平方誤差,又被稱為  範數損失(l2-norm loss)。

具體定義如下:

程式碼實現

以上指標在sklearn庫裡基本都有現成的模組可以直接使用。相關API可查閱doc。可參考https://yq.aliyun.com/articles/623375

在用scikit-learn呼叫分類器進行分類的時候,模型返回的score值其實就是準確率。

注意事項

(1). 效能指標常常因為不可微分,無法作為優化的loss函式,因此採用如cross-entropy, rmse等“距離”可微函式作為優化目標,以期待在loss函式降低的時候,能夠提高效能指標。而最終目標的效能指標則作為模型訓練過程中,作為驗證集做決定(early stoping或model selection)的主要依據,與訓練結束後評估本次訓練出的模型好壞的重要標準。在機器學習的比賽中,有部分比賽也是用metrics作為排名的依據(當然也有使用loss排名)。

(2). 實際中還需要考慮時間開銷,儲存開銷和可解釋性等問題。比如DDoS防禦中實際上最困難的不是檢測到DDoS攻擊,而是準確的,高效能的檢測DDoS流量,並進行清洗。而在學校裡模擬DDoS環境中,我們很難模擬這兩個指標:(1)高效能(時間和空間複雜度和有效性)(2)準確率,能否準確的檢測出DDoS(主要是和業務流量區分,如果沒有業務流量即背景流量,檢測DDoS有點搞笑)

(3).醫學,資訊檢索,web搜尋引擎,網路安全等領域都有自己的專用術語,但都與傳統的機器學習的名詞概念有所重合,只是叫法不同。

還可以參考:https://cloud.tencent.com/developer/article/1097870