分類模型的評價指標:Precision,Recall 和 Accuracy
分類模型的效能(Performance)
分類問題是當前機器學習、深度學習領域最為常見的問題,各式各樣的模型種類繁多。
如何評價這些模型的優劣呢?自然要做測試:
-
首先,準備好一些已知其真實分類的樣本;
-
然後,用分類模型對它們進行分類;
-
最後,將分類模型預測(predict)或者推斷(inference)的結果與實際情況相比較,以預測/推斷結果與真實的符合程度為依據來評價分類模型的效能(performance)。
既然要判斷程度,就必然會用到能夠描述“多少”的數值型指標。今天我們就要介紹幾種分類模型最常用的評價指標。
二分類模型的指標
我們先從最基礎的二分類模型說起。
所有的二分類模型做預測/推斷的結果都只能兩個:陽性(Positive,即正例)和陰性(Negative,即負例)。
二分類模型最常用的指標是: 精準率(Precision) 和 召回率(Recall)。
對於一個測試樣本,它本身有一個真實分類(陽性或者陰性)。將其輸入給二分類模型後,模型會給它打一個標籤——要麼陽性,要麼陰性。
樣本的真實分類和預測分類可能一致也可能不一致,總之會形成一個兩兩正交的情況,如下:
預測結果為陽性 (Positive) | 預測結果為陰性 (Negative) | |
---|---|---|
預測結果是真實的 (True) | TP :實際為Positive,也被預測為Positive的樣本數 | TN : 實際為Negative,也被預測為Negative的樣本數 |
預測結果是虛假的 (False) | FP :實際為Negative , 但被預測為Positive的樣本數 | FN :實際為Positive,但被預測為Negative的樣本數 |
精準率 :Precision=TP / (TP+FP),即在所有被預測為陽性的測試資料中,真正是陽性的比率。
召回率 :Recall=TP / (TP+FN),即在所有實際為陽性的測試資料中,真正是陽性的比率。
為了綜合這兩個指標並得出量化結果, 又發明了 F1Score 。
F1Score = 2*(Precision * Recall) / (Precision + Recall)
顯然上面三個值都是越大越好,但往往在實際當中P和R是矛盾的,很難保證雙高。
除了精準率和召回率,還有一個 準確率(Accuracy) ,可以用來評估分類模型。
準確率指分類模型預測正確的結果在整體中的佔比例。
Accuracy = 預測正確的樣本數 / 所有樣本數
二分類模型的Accuracy = (TP+TN) / (TP+TN+FP+FN) = (TP+TN) / Count(Samples)
多分類模型的指標
多分類模型的預測結果有多種型別,而不只是正例(陽性)和負例(陰性)兩種。
雖然如此,前面說的Precision,Recall和Accuracy同樣適用於多分類問題。
假設一個分類模型能預測N個分類:{Class1, Class2, ..., ClassN}.
每一個特定的測試樣本都有一個真實的分類,經過模型預測後,又會有一個預測分類。
假設樣本x1的真實分類是Class1,它的預測結果有N種可能( {Class1, Class2, ..., ClassN}中的任何一個)。
但是不管預測結果如何,從預測與真實的符合程度來看,只有兩種可能: 預測正確 (被預測為Class1),和 預測錯誤 (被預測為Class1之外的任何一類)。
當一個測試集全部被預測完之後, 會有一些實際是Class1 的樣本被預測為其他類,也會有一些其實不是Class1 的樣本,被預測成Class1 ,這樣的話就導致了下面這個結果:
預測結果為Class1(Positive) | 預測結果為非Class1(Negtive) | |
---|---|---|
預測結果是真實的(True) | Class1_TP :實際為Class1,也被預測為Class1的樣本數 | Class1_ TN : 實際不是Class1,也被測試為其他類(非Class1)的樣本數 |
預測結果是虛假的(False) | Class1_ FP :實際不是Class1 , 但被預測為Class1的樣本數 | Class1_ FN :實際為Class1,但被預測為其他類 (非Class1) 的樣本數 |
根據上表,我們就可以計算:
Class1的精準率:Class1_Precision = Class1_TP/( Class1_ TP+ Class1_ FP), 即在所有被預測為Class1的測試資料中,預測正確的比率。
Class1的召回率: Class1_ Recall = Class1_ TP/( Class1_ TP+ Class1_ FN),即在所有實際為Class1的測試資料中,預測正確的比率。
Class1的F1Score: Class1_ F1Score = 2 * (Class1_Precision * Class1_ Recall) / ( Class1_ Precision + Class1_ Recall)
同理,Class1的準確率:Class1_Accuracy = (Class1_TP + Class1_TN) / count(Samples)
一個多分類模型指標計算的例子
下面我們用一個例子來說明一下多分類模型的幾種指標的計算。具體資料如下表:
Actual_Class1 |
Actual_Class2 |
Actual_Class3 |
Total_Precdicted |
|
Predicted_Class1 |
30 |
20 |
10 |
60 |
Predicted_Class2 |
50 |
60 |
10 |
120 |
Predicted_Class3 |
20 |
20 |
80 |
120 |
Total_Actual |
100 |
100 |
100 |
可以看出,分類器一共可分出三個類:Class1,Class2和Class3;測試樣本一共有300個;測試樣本中三個類是平均分佈的。
然後,針對這三個類,我們用下面四種顏色分別標註出它們各自對應的TP,TN,FP和FN:
TP |
TN |
FP |
FN |
Class1 |
Actual_Class1 |
Actual_Class2 |
Actual_Class3 |
Predicted_Class1 |
30 |
20 |
10 |
Predicted_Class2 |
50 |
60 |
10 |
Predicted_Class3 |
20 |
20 |
80 |
Class1_TP = 30
Class1_TN = 60 + 10 + 20 + 80 = 170
Class1_FP = 20 + 10 = 30
Class1_FN = 50 + 30 = 70
Class1_Precision = 30 / 60 = 0.5
Class1_Recall = 30 / 100 = 0.3
Class1_Accurancy = (30 + 170) / 300 = 0.67
Class2 |
Actual_Class1 |
Actual_Class2 |
Actual_Class3 |
Predicted_Class1 |
30 |
20 |
10 |
Predicted_Class2 |
50 |
60 |
10 |
Predicted_Class3 |
20 |
20 |
80 |
Class2_TP = 60
Class2_TN = 30 + 10 + 20 + 80 = 140
Class2_FP = 50 + 10 = 60
Class2_FN = 20 + 20 = 40
Class2_Precision = 60 / 120 = 0.5
Class2_Recall = 60 / 100 = 0.6
Class2_Accurancy = (60 + 140 ) / 300 = 0.67
Class3 |
Actual_Class1 |
Actual_Class2 |
Actual_Class3 |
Predicted_Class1 |
30 |
20 |
10 |
Predicted_Class2 |
50 |
60 |
10 |
Predicted_Class3 |
20 |
20 |
80 |
Class3_TP = 80
Class3_TN = 30 + 20 + 50 + 60 = 160
Class3_FP = 20 + 20 = 40
Class3_FN = 10 + 10 = 20
Class3_Precision = 80 / 120 = 0.67
Class3_Recall = 80 / 100 = 0.8
Class3_Accurancy = (80 + 160) / 300 = 0.8
多分類模型的整體效能
當我們評估一個多分類模型的時候,一般不會用具體某一個類的Precision,Recall或者Accuracy去對其進行評價,而是會用一個數值來代表整體效能。
通常會用到的指標是整體準確率。我們可能會想,整體正確率就是對所有類的Accuracy求均值或者加權求均值。
但是實際上,有一個更直接更方面的方法:
Overall Accuracy = 各類被預測對了的樣本數量的累加 / 樣本總數 = sum (class_i_TP) / count(Samples)
比如上面的例子裡,Overall Accuracy = (30 + 60 + 80) / 300 = 0.57
指標和資料繫結
需要注意的是,所有的效能指標:Precision,Recall,Accuracy等,都和具體的 測試資料有關。
同樣的模型,換一套測試資料後,很可能某一類,甚至所有類的P,R,A會有所變化。
有變化是一正常的,但如果這種變化超過了一定幅度,就要考慮是否存在bias或者overfitting的情況。
掃描下面二維碼,搭上小編直通車
歡迎掃面下列二維碼關注“悅思悅讀”公眾微信號