標籤:

【機器學習備忘錄】AUC值的含義與計算方法

【機器學習備忘錄】AUC值的含義與計算方法

來自專欄 機器學習與自然語言處理

引言

在機器學習領域,AUC值經常用來評價一個二分類模型的訓練效果,對於許多機器學習或者數據挖掘的從業者或在校學生來說,AUC值的概念也經常被提起,但由於大多數時候我們都是藉助一些軟體包來訓練機器學習模型,模型評價指標的計算往往被軟體包所封裝,因此我們常常會忽略了它們的具體意義,這在有些時候會讓我們對於手頭正在進行的任務感到困惑。筆者也曾遇到類似的問題,因此希望藉由本文來梳理下AUC值的意義與計算方法,通過實際的例子幫助讀者加深理解,同時給出了使用scikit-learn工具庫計算AUC值的方法,供各位參考。

定義

AUC的全稱是Area under the Curve of ROC,也就是ROC曲線下方的面積。這裡出現了另一個概念,就是ROC曲線。那麼ROC曲線是個什麼東西呢?我們參看下維基百科上的定義:在信號檢測理論中,接收者操作特徵曲線(receiver operating characteristic curve,或者叫ROC曲線)是一種坐標圖式的分析工具,用於 (1) 選擇最佳的信號偵測模型、捨棄次佳的模型。 (2) 在同一模型中設定最佳閾值。這個概念最早是由二戰中的電子工程師和雷達工程師發明的,用來偵測戰場上的敵軍載具。概括來說,可以把ROC曲線理解為一種用於統計分析的圖表工具。

那麼具體到機器學習的理論中,ROC曲線該怎麼理解呢?首先,需要指出的是,ROC分析的是二元分類模型,也就是輸出結果只有兩種類別的模型,比如:(陽性/陰性)(有病/沒病)(垃圾郵件/非垃圾郵件)。在二分類問題中,數據的標籤通常用(0/1)來表示,在模型訓練完成後進行測試時,會對測試集的每個樣本計算一個介於0~1之間的概率,表徵模型認為該樣本為陽性的概率,我們可以選定一個閾值,將模型計算出的概率進行二值化,比如選定閾值=0.5,那麼當模型輸出的值大於等於0.5時,我們就認為模型將該樣本預測為陽性,也就是標籤為1,反之亦然。選定的閾值不同,模型預測的結果也會相應地改變。二元分類模型的單個樣本預測有四種結果:

  1. 真陽性(TP):判斷為陽性,實際也是陽性。
  2. 偽陽性(FP):判斷為陰性,實際卻是陽性。
  3. 真陰性(TN):判斷為陰性,實際也是陰性。
  4. 偽陰性(FN):判斷為陰性,實際卻是陽性。

這四種結果可以畫成2 × 2的混淆矩陣:

有了混淆矩陣,就可以定義ROC曲線了。ROC曲線將假陽性率(FPR)定義為 X 軸,真陽性率(TPR)定義為 Y 軸。其中:

  • TPR:在所有實際為陽性的樣本中,被正確地判斷為陽性的樣本比率。
  • FPR:在所有實際為陰性的樣本中,被錯誤地判斷為陽性的樣本比率。
  • TPR = TP / (TP + FN)
  • FPR = FP / (FP + TN)

給定一個二分類模型和它的閾值,就可以根據所有測試集樣本點的真實值和預測值計算出一個 (X=FPR, Y=TPR) 坐標點,這也就是繪製單個點的方法。那整條ROC曲線又該怎麼畫呢?具體方法如下:

在我們訓練完一個二分類模型後,可以使用該模型對測試集中的全部樣本點計算一個對應的概率值,每個值都介於0~1之間。假設測試集有100個樣本點,我們可以對這100個樣本的預測值從高到低排序,然後依次取每個值作為閾值,一旦閾值確定我們就可以繪製ROC曲線上的一個點,按照這種方法依次將100個點繪製出來,再將各個點依次連接起來,就得到了我們想要的ROC曲線!

然後再回到最初的問題,AUC值其實就是ROC曲線下方所覆蓋的面積,當我們繪製出ROC曲線之後,AUC的值自然也就計算好啦。

示例

這裡引用上海交大張偉楠老師機器學習課件中的例子來說明:

如上圖所示,我們有8個測試樣本,模型的預測值(按大小排序)和樣本的真實標籤如右表所示,繪製ROC曲線的整個過程如下所示:

  1. 令閾值等於第一個預測值0.91,所有大於等於0.91的預測值都被判定為陽性,此時TPR=1/4,FPR=0/4,所有我們有了第一個點(0.0,0.25)
  2. 令閾值等於第二個預測值0.85,所有大於等於0.85的預測值都被判定為陽性,這種情況下第二個樣本屬於被錯誤預測為陽性的陰性樣本,也就是FP,所以TPR=1/4,FPR=1/4,所以我們有了第二個點(0.25,0.25)
  3. 按照這種方法依次取第三、四…個預測值作為閾值,就能依次得到ROC曲線上的坐標點(0.5,0.25)、(0.75,0.25)…(1.0,1.0)
  4. 將各個點依次連接起來,就得到了如圖所示的ROC曲線
  5. 計算ROC曲線下方的面積為0.75,即AUC=0.75

代碼

在清楚了AUC值的計算原理後,我們再來看看如何在代碼中實現它。通常很多的機器學習工具都封裝了模型指標的計算,當然也包括AUC值。這裡我們來一起看下scikit-learnAUC的計算方式,如下所示:

>>> import numpy as np>>> from sklearn.metrics import roc_auc_score>>> y_true = np.array([0, 0, 1, 1])>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])>>> roc_auc_score(y_true, y_scores)0.75

可以看出,使用scikit-learn工具提供的roc_auc_score函數計算AUC值相當簡單,只需要提供樣本的實際標籤和預測值這兩個變數即可,大大方便了我們的使用,真心感謝這些開源軟體的作者們!

總結

看到這裡的小夥伴們是不是對AUC值的概念有了更好的理解呢。總的來說,AUC值就是一個用來評價二分類模型優劣的常用指標,AUC值越高通常表明模型的效果越好,在實際使用中我們可以藉助軟體包的相應函數進行快速計算。如果各位還有一些問題或者是對文章中的某些部分有疑問,歡迎在評論區討論。

參考

ROC曲線維基百科?

zh.wikipedia.org

張偉楠老師課件?

wnzhang.net

機器學習和統計裡面的auc怎麼理解??

www.zhihu.com圖標
推薦閱讀:

Machine Learning in Action機器學習實戰——勘誤
Pytorch and Tensorflow的第一步
如何評價周志華深度森林模型
SVM推導過程
詳解機器學習之感知機理論與實踐

TAG:機器學習 |