根據前面幾篇文章我們可以知道,當我們為模型泛化性能選擇評估指標時,要根據問題本身以及數據集等因素來做選擇.本篇博客主要是解釋Micro Average,Macro Average,Weighted Average.這三者常用於多分類任務,他們的計算方法有細微的差別,因此在各自表示的含義和適用場景上也有細微的差別
Micro Average
Micro Average會考慮到所有類別的貢獻.舉個例子, 假設我們有四個類A,B,C,D. 通過模型預測得到了預測值:
真實值:A, A, A, A, B, B, B, B, B, C, C, C, C, D, D, D,
預測值:A, A, C, B, B, B, B, A, D, C, C, A, D, D, D, C
根據預測值和真實值,對每個類計算出(TPi),假正例(FPi), 假反例(FNi), i表示第i個類.不了解真正例假反例的可以看我這篇博客機器學習--如何理解Accuracy, Precision, Recall, F1 score
Class A | Class B | Class C | Class D | |
TP | 2 | 3 | 2 | 2 |
FP | 2 | 1 | 2 | 2 |
FN | 2 | 2 | 2 | 1 |
首先計算MIcro Precesion, 計算公式如下
對於我們的例子,真正例就是被預測正確的樣本有2+3+2+3 = 10, 接下來計算假反例.采用one vs rest 方法,對於類i (i = A,B,C,D),屬於i的樣本被標記為正,不屬於i的樣本被標記為負.那么對於類i來說一個假正例意味着一個屬於類 j (j≠i)的樣本被錯誤的預測為i. 比如說樣本屬於類A但被錯誤的預測為類B,那么對於類B而言,這個預測就是一個假正例.所以一個假反例就意味着一個錯誤的預測值,總的假反例就是總的錯誤的預測值.在我們的例子中FP = 2+2+0+2 = 6, 所以Micro Precesion = 10/(10+6)=0.625.
下面計算Micro Recall, 真正例依舊有10例,接下來計算假正例,同樣采用one vs rest 方法,對於類i (i = A,B,C,D),一個假反例意味着一個屬於類i的樣本被錯誤的預測為類j (j≠i). 比如說樣本屬於類A但被錯誤的預測為類B,那么對於類A而言,這個預測就是一個假反例.更為一般的,一個錯誤的預測值(A被錯誤的預測為B),對於B而言是一個假正例,對於A而言是一個假反例.因此總的假反例也就是總的錯誤的預測值,所以Micro Recall = 10/(10+6)=0.625.
由上我們知道Micro Recall = Micro Precesion , 而 Micro F1 = (2* Micro Precesion*Micro Recall)/(Micro Precesion + Micro Recall),不難得出Micro Recall = Micro Precesion = Micro F1.
而且我們也能看出,上邊求得的值也表示了分類器的精確度(Accuracy), 即被正確分類的樣本占總的樣本的比例.因此對於Micro F1而言右邊的等式恆成立,Micro F1 = Micro Recall = Micro Precesion = Accuracy
Macro Average
Macro Average會首先針對每個類計算評估指標如查准率Precesion,查全率 Recall , F1 Score,然后對他們取平均得到Macro Precesion, Macro Recall, Macro F1. 具體計算方式如下:
首先計算Macro Precesion,先計算每個類的查准率,再取平均: PrecesionA=2/(2+2) = 0.5, PrecesionB=3/(3+2) = 0.6, PrecesionC=2/(2+0) = 1, PrecesionD=3/(3+2) = 0.6, Macro Precesion = (PrecesionA+PrecesionB + PrecesionC + PrecesionD )/4 = 0.675
對於Macro Recall采用同樣的計算方法,RecallA = 2/(2+2) = 0.5, RecallB = 3/(3+2) = 0.6, RecallC = 2/(2+2)=0.5 , RecallD =2/(2+0) = 1, Macro Recall = (RecallA+RecallB+RecallC+RecallD)/4 = 0.65
最后計算 Macro F1, F1A = 0.5, F1B = 0.6, F1C = 0.67, F1D = 0.75, Macro F1 = (F1A+F1B+F1C+F1D)/4 = 0.63.
Weighted Average
從計算的角度講,先對每個類求值,再取平均得到Macro Average會比較容易.但是當數據集中存在嚴重類別不平衡的問題時,就不適宜單純使用Macro Average.此時可以采取weighted average. 具體來說當我們計算Macro Average時候我們給每個類賦予相同的權重,但是當樣本不平衡時,不適宜給每個類賦予同樣的權重,我們可以根據每個類的樣本量,給每個類賦予不同的權重,這就是weighted average的計算方法.在我們的例子中一共有16個樣本,其中A類有4個,B類有5個,C類有4個,D類有3個,那么
weighted-F1 = (4*0.5+5*0.6+4*0.67+3*0.75)/16 = 0.618
weighted-Precesion = (4*0.5+5*0.6+4*1+3*0.6)/16 = 0.675
weighted-Recall = (4*0.5+5*0.6+4*0.5+3*1)/16 = 0.625
注意事項
當我們在使用F1的時候要注意,它對Precesion 和Recall賦予相同的權重.但在實際應用中我們需要從給定的問題出發,考慮Precesion 和Recall的哪一個更重要.比如把一個患病的人誤診為健康人所帶來的后果遠比把一個健康人誤診為患病造成的后果要嚴重.這個事實就應該反映在權重和代價損失函數上,進而幫助我們選出最佳分類器.二分類問題是這樣,多分類問題就更為復雜.在多分類情況下,不同的預測誤差可能具有不同的含義,比如說將X預測為Y比將W預測為R產生更高的代價.而標准的F1是不會考慮這些事情,因此我們需要針對特定的問題選擇合適的模型性能衡量指標.
reference Multi-Class Metrics Made Simple, Part II: the F1-score--Boaz Shmueli