評價指標是針對將相同的數據,輸入不同的算法模型,或者輸入不同參數的同一種算法模型,而給出這個算法或者參數好壞的定量指標。
在模型評估過程中,往往需要使用多種不同的指標進行評估,在諸多的評價指標中,大部分指標只能片面的反應模型的一部分性能,如果不能合理的運用評估指標,不僅不能發現模型本身的問題,而且會得出錯誤的結論。
最近恰好在做文本分類的工作,所以把機器學習分類任務的評價指標又過了一遍。本文將詳細介紹機器學習分類任務的常用評價指標:准確率(Accuracy)、精確率(Precision)、召回率(Recall)、P-R曲線(Precision-Recall Curve)、F1 Score、混淆矩陣(Confuse Matrix)、ROC、AUC。
准確率(Accuracy)
准確率是分類問題中最為原始的評價指標,准確率的定義是預測正確的結果占總樣本的百分比,其公式如下:
其中:
- 真正例(True Positive, TP):被模型預測為正的正樣本;
- 假正例(False Positive, FP):被模型預測為正的負樣本;
- 假負例(False Negative, FN):被模型預測為負的正樣本;
- 真負例(True Negative, TN):被模型預測為負的負樣本;
但是,准確率評價算法有一個明顯的弊端問題,就是在數據的類別不均衡,特別是有極偏的數據存在的情況下,准確率這個評價指標是不能客觀評價算法的優劣的。例如下面這個例子:
在測試集里,有100個sample,99個反例,只有1個正例。如果我的模型不分青紅皂白對任意一個sample都預測是反例,那么我的模型的准確率就為0.99,從數值上看是非常不錯的,但事實上,這樣的算法沒有任何的預測能力,於是我們就應該考慮是不是評價指標出了問題,這時就需要使用其他的評價指標綜合評判了。
精確率(Precision)、召回率(Recall)
精准率(Precision)又叫查准率,它是針對預測結果而言的,它的含義是在所有被預測為正的樣本中實際為正的樣本的概率,意思就是在預測為正樣本的結果中,我們有多少把握可以預測正確,其公式如下:
精准率和准確率看上去有些類似,但是完全不同的兩個概念。精准率代表對正樣本結果中的預測准確程度,而准確率則代表整體的預測准確程度,既包括正樣本,也包括負樣本。
召回率(Recall)又叫查全率,它是針對原樣本而言的,它的含義是在實際為正的樣本中被預測為正樣本的概率,其公式如下:
引用Wiki中的圖,幫助說明下二者的關系。
在不同的應用場景下,我們的關注點不同,例如,在預測股票的時候,我們更關心精准率,即我們預測升的那些股票里,真的升了有多少,因為那些我們預測升的股票都是我們投錢的。而在預測病患的場景下,我們更關注召回率,即真的患病的那些人里我們預測錯了情況應該越少越好。
精確率和召回率是一對此消彼長的度量。例如在推薦系統中,我們想讓推送的內容盡可能用戶全都感興趣,那只能推送我們把握高的內容,這樣就漏掉了一些用戶感興趣的內容,召回率就低了;如果想讓用戶感興趣的內容都被推送,那只有將所有內容都推送上,寧可錯殺一千,不可放過一個,這樣准確率就很低了。
在實際工程中,我們往往需要結合兩個指標的結果,去尋找一個平衡點,使綜合性能最大化。
P-R曲線
P-R曲線(Precision Recall Curve)正是描述精確率/召回率變化的曲線,P-R曲線定義如下:根據學習器的預測結果(一般為一個實值或概率)對測試樣本進行排序,將最可能是“正例”的樣本排在前面,最不可能是“正例”的排在后面,按此順序逐個把樣本作為“正例”進行預測,每次計算出當前的P值和R值,如下圖所示:
P-R曲線如何評估呢?若一個學習器A的P-R曲線被另一個學習器B的P-R曲線完全包住,則稱:B的性能優於A。若A和B的曲線發生了交叉,則誰的曲線下的面積大,誰的性能更優。但一般來說,曲線下的面積是很難進行估算的,所以衍生出了“平衡點”(Break-Event Point,簡稱BEP),即當P=R時的取值,平衡點的取值越高,性能更優。
F1-Score
正如上文所述,Precision和Recall指標有時是此消彼長的,即精准率高了,召回率就下降,在一些場景下要兼顧精准率和召回率,最常見的方法就是F-Measure,又稱F-Score。F-Measure是P和R的加權調和平均,即:
特別地,當β=1時,也就是常見的F1-Score,是P和R的調和平均,當F1較高時,模型的性能越好。
ROC曲線
ROC以及后面要講到的AUC,是分類任務中非常常用的評價指標,本文將詳細闡述。可能有人會有疑問,既然已經這么多評價標准,為什么還要使用ROC和AUC呢?
因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類別不平衡(Class Imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨着時間變化,ROC以及AUC可以很好的消除樣本類別不平衡對指標結果產生的影響。
另一個原因是,ROC和上面做提到的P-R曲線一樣,是一種不依賴於閾值(Threshold)的評價指標,在輸出為概率分布的分類模型中,如果僅使用准確率、精確率、召回率作為評價指標進行模型對比時,都必須時基於某一個給定閾值的,對於不同的閾值,各模型的Metrics結果也會有所不同,這樣就很難得出一個很置信的結果。
在正式介紹ROC之前,我們還要再介紹兩個指標,這兩個指標的選擇使得ROC可以無視樣本的不平衡。這兩個指標分別是:靈敏度(sensitivity)和特異度(specificity),也叫做真正率(TPR)和假正率(FPR),具體公式如下。
- 真正率(True Positive Rate , TPR),又稱靈敏度:
其實我們可以發現靈敏度和召回率是一模一樣的,只是名字換了而已
- 假負率(False Negative Rate , FNR) :
- 假正率(False Positive Rate , FPR) :
- 真負率(True Negative Rate , TNR),又稱特異度:
細分析上述公式,我們可以可看出,靈敏度(真正率)TPR是正樣本的召回率,特異度(真負率)TNR是負樣本的召回率,而假負率\(FNR=1-TPR\)、假正率\(FPR=1-TNR\),上述四個量都是針對單一類別的預測結果而言的,所以對整體樣本是否均衡並不敏感。舉個例子:假設總樣本中,90%是正樣本,10%是負樣本。在這種情況下我們如果使用准確率進行評價是不科學的,但是用TPR和TNR卻是可以的,因為TPR只關注90%正樣本中有多少是被預測正確的,而與那10%負樣本毫無關系,同理,FPR只關注10%負樣本中有多少是被預測錯誤的,也與那90%正樣本毫無關系。這樣就避免了樣本不平衡的問題。
ROC(Receiver Operating Characteristic)曲線,又稱接受者操作特征曲線。該曲線最早應用於雷達信號檢測領域,用於區分信號與噪聲。后來人們將其用於評價模型的預測能力。ROC曲線中的主要兩個指標就是真正率TPR和假正率FPR,上面已經解釋了這么選擇的好處所在。其中橫坐標為假正率(FPR),縱坐標為真正率(TPR),下面就是一個標准的ROC曲線圖。
閾值問題
與前面的P-R曲線類似,ROC曲線也是通過遍歷所有閾值來繪制整條曲線的。如果我們不斷的遍歷所有閾值,預測的正樣本和負樣本是在不斷變化的,相應的在ROC曲線圖中也會沿着曲線滑動。
我們看到改變閾值只是不斷地改變預測的正負樣本數,即TPR和FPR,但是曲線本身並沒有改變。這是有道理的,閾值並不會改變模型的性能。
判斷模型性能
那么如何判斷一個模型的ROC曲線是好的呢?這個還是要回歸到我們的目的:FPR表示模型對於負樣本誤判的程度,而TPR表示模型對正樣本召回的程度。我們所希望的當然是:負樣本誤判的越少越好,正樣本召回的越多越好。所以總結一下就是TPR越高,同時FPR越低(即ROC曲線越陡),那么模型的性能就越好。參考如下動態圖進行理解。
即:進行模型的性能比較時,與PR曲線類似,若一個模型A的ROC曲線被另一個模型B的ROC曲線完全包住,則稱B的性能優於A。若A和B的曲線發生了交叉,則誰的曲線下的面積大,誰的性能更優。
無視樣本不平衡
前面已經對ROC曲線為什么可以無視樣本不平衡做了解釋,下面我們用動態圖的形式再次展示一下它是如何工作的。我們發現:無論紅藍色樣本比例如何改變,ROC曲線都沒有影響。
AUC
AUC(Area Under Curve)又稱為曲線下面積,是處於ROC Curve下方的那部分面積的大小。上文中我們已經提到,對於ROC曲線下方面積越大表明模型性能越好,於是AUC就是由此產生的評價指標。通常,AUC的值介於0.5到1.0之間,較大的AUC代表了較好的Performance。如果模型是完美的,那么它的AUC = 1,證明所有正例排在了負例的前面,如果模型是個簡單的二類隨機猜測模型,那么它的AUC = 0.5,如果一個模型好於另一個,則它的曲線下方面積相對較大,對應的AUC值也會較大。
物理意義
AUC對所有可能的分類閾值的效果進行綜合衡量。首先AUC值是一個概率值,可以理解為隨機挑選一個正樣本以及一個負樣本,分類器判定正樣本分值高於負樣本分值的概率就是AUC值。簡言之,AUC值越大,當前的分類算法越有可能將正樣本分值高於負樣本分值,即能夠更好的分類。
混淆矩陣
混淆矩陣(Confusion Matrix)又被稱為錯誤矩陣,通過它可以直觀地觀察到算法的效果。它的每一列是樣本的預測分類,每一行是樣本的真實分類(反過來也可以),顧名思義,它反映了分類結果的混淆程度。混淆矩陣\(i\)行\(j\)列的原始是原本是類別\(i\)卻被分為類別\(j\)的樣本個數,計算完之后還可以對之進行可視化:
多分類問題
對於多分類問題,或者在二分類問題中,我們有時候會有多組混淆矩陣,例如:多次訓練或者在多個數據集上訓練的結果,那么估算全局性能的方法有兩種,分為宏平均(macro-average)和微平均(micro-average)。簡單理解,宏平均就是先算出每個混淆矩陣的P值和R值,然后取得平均P值macro-P和平均R值macro-R,再算出\(Fβ\)或\(F1\),而微平均則是計算出混淆矩陣的平均TP、FP、TN、FN,接着進行計算P、R,進而求出\(Fβ\)或\(F1\)。其它分類指標同理,均可以通過宏平均/微平均計算得出。
需要注意的是,在多分類任務場景中,如果非要用一個綜合考量的metric的話,宏平均會比微平均更好一些,因為宏平均受稀有類別影響更大。宏平均平等對待每一個類別,所以它的值主要受到稀有類別的影響,而微平均平等考慮數據集中的每一個樣本,所以它的值受到常見類別的影響比較大。