為機器學習模型選擇正確的度量評估(第二部分)

2019-09-18     AI公園
作者:Alvira Swalin
編譯:ronghuaiyang

導讀

今天是第二部分,分類的度量。

本系列的第二部分將重點討論分類指標

在第一部分中,我們討論了回歸中使用的一些重要指標、它們的優缺點和用例。這一部分將著重於分類中常用的度量標準,為什麼我們應該在上下文中選擇其中的一些。

定義

在討論每種方法的優缺點之前,讓我們首先了解分類問題中使用的基本術語。如果你已經熟悉這些術語,可以跳過本節。

召回率或敏感性或TPR(真陽率):在全部真實陽性中正確識別為陽性的項目數量- TP/(TP+FN)

特異性或TNR(真陰率):在總的陰性中正確識別為陰性的項目數量- TN/(TN+FP)

精度:在確定為陽性的總項目中,正確確定為陽性的項目數量- TP/(TP+FP)

假陽率或I型錯誤:在全部真陰性中錯誤識別為陽性的項目數量- FP/(FP+TN)

假陰率或II類錯誤:在全部真陽性中錯誤識別為陰性的項目數量- FN/(FN+TP)

  • 混淆矩陣

  • F1分數:是給出的精度和召回率的調和平均值
  • F1 = 2PrecisionRecall/(Precision + Recall)
  • 準確性:分類正確總項目的百分比- (TP+TN)/(N+P)

ROC-AUC Score

ROC-AUC分數的機率解釋是,如果你隨機選擇一個正樣本和一個負樣本,根據分類器,正樣本排在負樣本前面的機率由AUC給出。在這裡,排序是根據預測值的順序確定的。



在數學上,它是由靈敏度曲線(TPR) vs FPR(1-specificity)下的面積來計算的。理想情況下,我們希望有高敏感性和高特異性,但在現實場景中,敏感性和特異性之間總是存在權衡。

ROC-AUC的一些重要特徵是:

  • 取值範圍從0到1。而對於平衡數據,隨機分類器的auc評分為0.5
  • ROC-AUC評分獨立於設定的分類閾值,因為它只考慮每個預測的秩,不考慮其絕對值。F1分數不一樣,在機率輸出的情況下,它需要一個閾值。

Log-Loss

Log-loss是一種精度度量,它結合了機率置信度的思想,由以下二元類的表達式給出:

它考慮到你的預測的不確定性基於它與實際標籤的差異。在最壞的情況下,假設所有觀測值都是0.5。所以log-loss就變成-log(0.5)= 0.69。因此,我們可以說,考慮到實際機率,任何大於0.6的模型都是非常糟糕的。

案例1

Log-loss 和 ROC 和 F1的對比



考慮情形1(平衡數據),看起來模型1在預測絕對機率方面做得更好,而模型2在根據觀測值的真實標籤對其進行排序方面做得最好。讓我們用實際分數來驗證:

如果考慮log-loss,模型2給出log-loss的高值是最糟糕的,因為絕對機率與實際標籤有很大的差異。但這與F1和AUC評分完全不一致,其中模型2的準確率為100%。此外,你還需要注意,隨著閾值的不同,F1分數也在變化,默認閾值0.5更傾向於模型1而不是模型2。

由以上例子得出的推論(平衡數據集):如果你關心的是絕對機率差,那就用log-loss吧
  • 如果你只關心最後的類預測,你不想調整閾值,去AUC評分
  • f1分數對閾值很敏感,在比較模型之前,你需要先對其進行優化

案例2

如何處理不均衡數據集?

這兩種模型的唯一區別是它們對觀測結果13和14的預測。模型1是在樣本13(標籤為0)的分類上做的更好,而模型2在樣本14(標籤為1)的分類上做的更好。我們的目標是看哪個模型實際捕獲的不同分類不平衡類更好(樣本很少的類別,這裡是標籤1)。在欺詐檢測/垃圾郵件檢測等問題,正樣本很少,我們希望我們的模型能夠正確地預測陽性類,因此我們有時會更喜歡那些能夠對這些陽性標籤進行分類的模型。

顯然在這種情況下log-loss是失敗的,因為根據log-loss,這兩個模型的性能是相同的。這是因為log-loss函數是對稱的,不區分類。

F1評分和ROC-AUC評分均優於模型2和模型1。我們可以用這兩種方法來處理類不平衡。但我們還需要進一步研究,看看他們對待類別不平衡的方式有何不同。

在前面的例子中,我們看到正樣本的標籤很少。在第二個例子中,負樣本標籤很少。讓我們看看F1分數和ROC-AUC如何區分這兩種情況。

ROC-AUC score處理少量負標籤的方式與處理少量正標籤的方式相同。這裡需要注意的一件有趣的事情是,F1分數對於模型3和模型4幾乎是相同的,因為正標籤的數量很大,它只關心正標籤的錯誤分類。

從上面的例子中得出的推論:
  • 如果你關係的是一個數量較少的類,而與它是正的還是負的無關,那麼選擇ROC-AUC分數。

什麼時候用F1比ROC-AUC好?

當你的正類的數量很少,那麼F1分數更有意義。這是欺詐檢測中常見的問題,因為正面標籤很少。我們可以通過下面的例子來理解這個語句。

 from sklearn import metrics
import numpy as np

y_true = np.concatenate((np.ones(100), np.zeros(900)))

a = np.random.uniform(0.5,1, 5)
b = np.random.uniform(0,0.5, 995)
y_pred1 = np.concatenate((a,b))

a = np.random.uniform(0.5,1, 90)
b = np.random.uniform(0,0.5, 910)
y_pred2 = np.concatenate((a,b))

print(metrics.f1_score(y_true, y_pred1>0.5))
print(metrics.f1_score(y_true, y_pred2>0.5))

print(metrics.roc_auc_score(y_true, y_pred1))
print(metrics.roc_auc_score(y_true, y_pred2))

我們可以看到,模型(1)在10K大小的數據集中預測100個真實陽性數據中的5個陽性,而另一個模型(2)預測100個真實陽性數據中的90個陽性。顯然,在這種情況下,模型(2)比模型(1)做得更好。讓我們看看F1分數和ROC-AUC分數是否能夠捕捉到這種差異。

模型(1)F1評分= 2(1)(0.1)/1.1 = 0.095

模型(2)F1評分= 2(1)(0.9)/1.9 = 0.947

是的,F1分數的差異反映了模型的性能。

模型(1)的ROC-AUC = 0.5

模型(2)的ROC-AUC = 0.93

ROC-AUC也給模型1打了一個不錯的分數,但這並不能很好地反映模型1的性能。因此,對於不平衡的數據集,在選擇ROC-AUC時要非常小心。

對於多分類你應該用什麼樣的度量?

我們還有另外三種類型的非二進位分類:

多類:分類任務有兩個以上的類,使輸入被分類為其中一個類,並且只能分為一個類。示例:將一組水果圖像分成以下任意一類—蘋果、香蕉和橙子。

多標籤:將樣本分類為一組目標標籤。例如:將博客標記為一個或多個主題,如技術、宗教、政治等。標籤是孤立的,它們之間的關係並不重要。

層次分類:每個類別都可以與類似的類別分組在一起,創建元類,這些元類又可以分組,直到我們到達根級別(包含所有數據的集合)。例如文本分類和物體分類。有關更多細節,請參考這個博客。

在本文中,我們將只討論第一類。

正如你在上表中所看到的,我們大致有兩種指標類型—微觀平均和宏觀平均,我們將討論每種指標的優缺點。多類最常用的度量標準是F1分數、平均精度、log損失。目前還沒有完善的針對多類的ROC-AUC評分。

多類的log-loss定義為:

在微觀平均法中,將不同集合的系統的真陽性、假陽性和假陰性相加,然後應用它們得到統計數據。在宏觀平均中,取系統在不同集合上的精度和召回率的平均值

如果存在類不平衡問題,最好使用微觀平均值

英文原文:https://medium.com/usf-msds/choosing-the-right-metric-for-evaluating-machine-learning-models-part-2-86d5649a5428

更多文章,請關注微信公眾號:AI公園

文章來源: https://twgreatdaily.com/LtRGSm0BJleJMoPMYi_c.html