1. 程式人生 > >【機器學習】一文讀懂分類演算法常用評價指標

【機器學習】一文讀懂分類演算法常用評價指標

評價指標是針對將相同的資料,輸入不同的演算法模型,或者輸入不同引數的同一種演算法模型,而給出這個演算法或者引數好壞的定量指標。

在模型評估過程中,往往需要使用多種不同的指標進行評估,在諸多的評價指標中,大部分指標只能片面的反應模型的一部分效能,如果不能合理的運用評估指標,不僅不能發現模型本身的問題,而且會得出錯誤的結論。

最近恰好在做文字分類的工作,所以把機器學習分類任務的評價指標又過了一遍。本文將詳細介紹機器學習分類任務的常用評價指標:準確率(Accuracy)、精確率(Precision)、召回率(Recall)、P-R曲線(Precision-Recall Curve)、F1 Score、混淆矩陣(Confuse Matrix)、ROC、AUC。

準確率(Accuracy)

準確率是分類問題中最為原始的評價指標,準確率的定義是預測正確的結果佔總樣本的百分比,其公式如下:
\[ Accuracy = \frac{TP+TN}{TP+TN+FP+FN} \]
其中:

  • 真正例(True Positive, TP):被模型預測為正的正樣本;
  • 假正例(False Positive, FP):被模型預測為正的負樣本;
  • 假負例(False Negative, FN):被模型預測為負的正樣本;
  • 真負例(True Negative, TN):被模型預測為負的負樣本;

但是,準確率評價演算法有一個明顯的弊端問題,就是在資料的類別不均衡,特別是有極偏的資料存在的情況下,準確率這個評價指標是不能客觀評價演算法的優劣的。例如下面這個例子:

在測試集裡,有100個sample,99個反例,只有1個正例。如果我的模型不分青紅皁白對任意一個sample都預測是反例,那麼我的模型的準確率就為0.99,從數值上看是非常不錯的,但事實上,這樣的演算法沒有任何的預測能力,於是我們就應該考慮是不是評價指標出了問題,這時就需要使用其他的評價指標綜合評判了。

精確率(Precision)、召回率(Recall)

精準率(Precision)又叫查準率,它是針對預測結果而言的,它的含義是在所有被預測為正的樣本中實際為正的樣本的概率,意思就是在預測為正樣本的結果中,我們有多少把握可以預測正確,其公式如下:
\[ Precision = \frac{TP}{TP+FP} \]

精準率和準確率看上去有些類似,但是完全不同的兩個概念。精準率代表對正樣本結果中的預測準確程度,而準確率則代表整體的預測準確程度,既包括正樣本,也包括負樣本。

召回率(Recall)又叫查全率,它是針對原樣本而言的,它的含義是在實際為正的樣本中被預測為正樣本的概率,其公式如下:
\[ Recall = \frac{TP}{TP+FN} \]
引用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的加權調和平均,即:
\[ \frac{1}{F_{\beta}}=\frac{1}{1+\beta^{2}} \cdot\left(\frac{1}{P}+\frac{\beta^{2}}{R}\right) \]

\[ F_{\beta}=\frac{\left(1+\beta^{2}\right) \times P \times R}{\left(\beta^{2} \times P\right)+R} \]

特別地,當β=1時,也就是常見的F1-Score,是P和R的調和平均,當F1較高時,模型的效能越好。
\[ \frac{1}{F 1}=\frac{1}{2} \cdot\left(\frac{1}{P}+\frac{1}{R}\right) \]

\[ F1=\frac{2 \times P \times R}{P+R} = \frac{2 \times TP}{樣例總數+TP-TN} \]

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),又稱靈敏度:

\[ TPR = \frac{正樣本預測正確數}{正樣本總數} = \frac{TP}{TP+FN} \]

​ 其實我們可以發現靈敏度和召回率是一模一樣的,只是名字換了而已

  • 假負率(False Negative Rate , FNR) :

\[ FNR = \frac{正樣本預測錯誤數}{正樣本總數} = \frac{FN}{TP+FN} \]

  • 假正率(False Positive Rate , FPR) :

\[ FPR = \frac{負樣本預測錯誤數}{負樣本總數} = \frac{FP}{TN+FP} \]

  • 真負率(True Negative Rate , TNR),又稱特異度:

\[ TNR = \frac{負樣本預測正確數}{負樣本總數} = \frac{TN}{TN+FP} \]

細分析上述公式,我們可以可看出,靈敏度(真正率)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\)。其它分類指標同理,均可以通過巨集平均/微平均計算得出。
\[ \operatorname{macro}P=\frac{1}{n} \sum_{i=1}^{n} P_{i} \]

\[ \operatorname{macro}R=\frac{1}{n} \sum_{i=1}^{n} R_{i} \]

\[ \operatorname{macro} F 1=\frac{2 \times \operatorname{macro} P \times \operatorname{macro} R}{\operatorname{macro} P+\operatorname{macro}R} \]

\[ \operatorname{micro} P=\frac{\overline{T P}}{\overline{T P}+\overline{F P}} \]

\[ \operatorname{micro}R=\frac{\overline{T P}}{\overline{T P}+\overline{F N}} \]

\[ \operatorname{micro} F 1=\frac{2 \times \operatorname{micro} P \times \operatorname{micro} R}{\operatorname{micro} P+\operatorname{micro}R} \]

需要注意的是,在多分類任務場景中,如果非要用一個綜合考量的metric的話,巨集平均會比微平均更好一些,因為巨集平均受稀有類別影響更大。巨集平均平等對待每一個類別,所以它的值主要受到稀有類別的影響,而微平均平等考慮資料集中的每一個樣本,所以它的值受到常見類別的影響比較大