模型評估:ROC曲線的繪製和AUC的計算

1. 混淆矩陣

在瞭解ROC之前,我們首先來了解一下混淆矩陣。

圖1 混淆矩陣

對於給出的一個二分類問題,在混淆矩陣中:

  • 橫向表示樣本對應的標籤正例和負例的真實情況。

  • 縱向表示樣本對應的標籤正例和負例的預測情況。

其中:

  • TP: 表示predict爲True, label爲positive的情況。
  • FP: 表示predict爲False, label 爲positive的情況。
  • TN: 表示predict爲True, label 爲negativ的情況。
  • FN: 表示predict爲False, label 爲negative的情況。

在此基礎上衍生出來其他一些評價指標的計算包括:

  • 準確率

表示在所有的樣本中,我們預測正確的結果的概率。

accurcy=TP+TNTN+TP+FN+FPaccurcy = \frac{TP + TN}{TN + TP + FN + FP}

  • 召回率

表示在所有label爲positive的樣本中,被我們預測爲postive的結果概率。

recall=TPTP+FNrecall = \frac{TP}{TP + FN}

  • 精確率

表示在所有predict爲positive的樣本中,被我們預測正確的結果的概率。
precision=TPTP+FPprecision = \frac{TP}{TP + FP}

2. ROC

2.1 什麼是ROC

在維基百科中對ROC的解釋:

A receiver operating characteristic curve, or ROC curve, is a graphical plot that illustrates the diagnostic ability of a binary classifier system as its discrimination threshold is varied.

接收器操作特性曲線(ROC曲線)是一個當二進制分類器系統的鑑別閾值變化時,用來說明這個系統判斷能力的曲線。

圖2 ROC曲線

其中橫軸表示FPR,縱軸表示TPR,其對應的計算方式如下:

  • TPRTPR(Recall,Sensitivity)

表示在所有label爲positive的樣本中,預測爲positive的概率

TPR=TPTP+FNTPR = \frac{TP}{TP + FN}

Specificity

Specificity=TNTN+FPSpecificity=\frac{TN}{TN + FP}

  • FPRFPR(1-Specificity)

表示在所有label爲negative的樣本中,預測爲positive的概率

FPR=FPTN+FPFPR = \frac{FP}{TN + FP}

所以TPRTPR表示正例中正確率,FPRFPR表示負例中錯誤率。

  • 問題1: 對於測試集合而言,我們的計算得到TPRTPRFPRFPR的結果應該是一個獨立的點,爲什麼會是一條曲線?

  • 問題2: 爲什麼通過ROC曲線可以評估模型,什麼樣的ROC曲線表示模型越好,什麼樣的ROC曲線表示模型越差勁?

帶着這兩個問題,我們開始進一步討論ROC如何評估一個分類模型。

2.2 ROC和模型的評估

2.2.1 ROC曲線的繪製

在回答上面的兩個問題之前,我們先來以二分類爲例。

爲什麼對於一個模型我們可以得到一條曲線。

例如以LR爲例,在最後的sigmoid作爲激活函數之後我們能夠得到一個概率值。

對於這個模型輸出的概率值,我們可以給定一個閾值。

當我們的輸出值大於這個閾值的時候判斷爲正例,當我們的輸出值小於這個閾值的時候判斷爲負例。

那麼,對於同一個模型給定不同的閾值就可以得到不同的TPRTPRFPRFPR繪製得到ROC曲線。

例如:我們給定多組閾值,然後就可以評估計算出不同閾值下的ROC曲線,具體圖像如下。

圖3 有限個閾值的ROC曲線

2.2.2 ROC曲線的具體意義

還是以LR做二分類爲例子,對於在給定樣本上的預測結果。

  • 用紅色線條表示label爲positive的結果,對應分類器輸出值的分佈。
  • 用綠色線條表示label爲negative的結果,對應分類器輸出值的分佈。

threshold=0.5threshold=0.5的情況下,閾值大於0.5全部預測爲positive,閾值小於0.5全部預測爲negative。

在此基礎上我們考慮以下幾種情況:

第一種情況:

圖4 可以完全區分的情況

在這種情況下我們

這種情況下分類器能夠完全對區分positive和negative的樣本。

這個時候得到的曲線ROC曲線爲:

圖5 可以完全區分的情況下的ROC曲線

第二種情況

圖6 部分分類錯誤

在這種情況下,以0.5作爲閾值沒有辦法完全區分樣本中label爲positive和negative的樣本。

交叉部分爲FNFNFPFP,這個時候對應的ROC曲線爲如下:

圖7 部分分類錯誤的ROC曲線

第三種情況

圖8 隨機分類

在極端情況下,分類器對所有positive樣本的輸出值分佈和negative樣本輸出的值的分佈是相同的。

這個時候無法通過選取閾值對分類器做有效的分類,對應的ROC曲線如下。

圖9 隨機分類的ROC曲線

這個時候,分類器對樣本的分類效果是隨機的。

3 AUC

細心的小朋友可能已經發現了,在上面的圖中我們已經給定了不同的狀況下AUC的值。

那麼有兩個問題:

第一個問題: AUC的值表示什麼樣含義?

第二個問題: AUC的值怎麼進行計算?

3.1 AUC值的含義

auc(area under curve)表示ROC曲線下的面積。

在繪製ROC曲線的過程中,Sensitivity和Specificity的值成反比所以當Sensitivity的時候Specificity,反之也成立。

圖10 部分分類錯誤

在這種情況下,以0.5作爲閾值沒有辦法完全區分樣本中label爲positive和negative的樣本。

交叉部分爲FNFNFPFP,這個時候對應的ROC曲線爲如下:

如圖當我們提高閾值的情況下,我們得到了更多的negative的值,這個時候Specificity(特異性)增加,但是Sensitivity(敏感度)減小。

我們的目的是希望得到一個分類器,在所有閾值的情況下都能夠得到一個對於任何閾值具有比較高的Specificity和Sensitivity。

這個時候,我們通過ROC曲線覆蓋的面積(AUC)來評估模型的效果。

那麼這裏存在一個疑問:爲什麼不用Specificity和Sensitivity的值直接繪製曲線然後計算AUC而是需要用1-Specificity來計算

3.2 AUC值的計算

根據上面的部分的描述,通過不同閾值我們可以繪製出ROC曲線,並且瞭解了AUC曲線那麼在評估模型當中的含義。

那麼怎麼樣計算AUC的值呢?

import numpy as np

a=[0.1, 0.2, 0.4]
b=[0.2, 0.4, 0.6]
print(np.trapz(a,b))

得到的結果爲:

0.09

具體的計算方式:

auc = (0.4-0.2) * (0.1 + 0.2) / 2 + (0.6-0.4) * (0.2 + 0.4) / 2


= 0.03 + 0.06


= 0.09

資料

Receiver operating characteristic

機器學習之分類器性能指標之ROC曲線、AUC值

Understanding AUC - ROC Curve

Understanding Confusion Matrix

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章