一文帶你徹底理解ROC曲線和AUC值

2021-01-09 Python之王

二分類模型預測的結果是否足夠好,ROC和AUC是重要指標。

1. T、F、P、N、R

首先我們先了解這四個概念:

T:True,真的F:False,假的P:Positive,陽性N:Negative,陰性R:Rate,比率,和上面四個沒直接關係比如說看病這個事情:

一個人得病了,但醫生檢查結果說他沒病,那麼他是假沒病,也叫假陰性(FN)一個人得病了,醫生檢查結果也說他有病,那麼他是真有病,也叫真陽性(TP)一個人沒得病,醫生檢查結果卻說他有病,那麼他是假有病,也叫假陽性(FP)一個人沒得病,醫生檢查結果也說他沒病,那麼他是真沒病,也叫真陰性(TN)這四種結局可以畫成2 × 2的混淆矩陣:

FN、TP、FP、TN可以這樣理解:第二個字母(N或P)是醫生說的,第一個字母(T或F)是對醫生說法的肯定(真沒病真陰TN,真有病真陽TP)或否定(假有病假陽FP,假沒病假陰FN)。

2. 查出率TPR和查錯率FPR

R是Rate(比率),那麼:

TPR,真陽率等於真陽數量除以真陽加假陰,就是真的有病並且醫生判斷也有病的病人數量除以全部真有病的人(真有病醫生也說有病的真陽+真有病醫生卻說沒病的假陰):

FPR,假陽率等於假陽數量除以假陽加真陰,就是沒病但醫生說有病的病人數量除以全部實際沒病的人(沒病但醫生說有病的+沒病醫生也說沒病的):

所以說,TPR真陽率是對有病的人的查出率,有病的人裡面查出來多少個;而FPR假陽率則是對沒病人員的誤檢率,沒病的人裡面誤檢了多少個。

ACC,Accuracy,精準度,有病被檢查出來的TP是檢測對了,沒病也檢測健康的TN也是檢測對了,所有檢測對的數量除以全部數量就是精準度:

3. 案例計算

假如說我們編寫了一個算法M,它能夠根據一系列的屬性(比如身高、愛好、衣著、飲食習慣等)來預測一個人的性別是男還是女。

然後我們有10個人屬性組數據讓算法M來預測,這10個人的真實性別和預測結果如下:

預測值中0代表女性,1代表男性,數字越大越接近男性特徵,數字越小越接近女性特徵。如果我們設定區分男女的閾值是0.5,那麼預測值大於0.5的都是P正向男性,小於0.5都是N負向女性。

那麼,真實6個男人中有[1,3,5,8,9]這5個都查出來了,算法M的查出率TPR=5/6=0.833;真實4個女性中6號被查錯,所以誤檢率FPR=1/4=0.25;精度是ACC=(5+3)/10=0.8。

但是注意,如果我們修改閾值等於0.4,那麼就會變為6個男人全被檢出TPR=1;而女性則被誤檢2個FPR=0.5;精度仍然是0.8。

4. 隨機算法

假設我們有一個庸醫,根本不懂醫術,當病人來檢查是否有病的時候,他就隨機亂寫有病或者沒病,結果呢,對於所有真實有病的,庸醫也能正確檢查出一半,就是TPR=0.5,同樣對於沒病的也是一半被誤檢,就是FPR=0.5。

這個庸醫的「隨機診法」原理上總能得到相等的查出率和誤檢率,如果我們把FPR當做坐標橫軸,TPR當做數軸,那麼「隨機診法」對應了[0,0]到[1,1]的那條直線。

如圖所示,越靠近左上角的情況查出率越高,查錯率越低,[0,1]點是最完美的狀態。而越靠近右下角,算法質量越低。

注意圖中右下角C點,這裡查錯率高,查出率低,屬於很糟糕的情況;但是如果我們把C點沿紅色斜線對稱上去成為C'點,那就很好了。——所以,如果你的算法預測結果總是差的要死,那麼可以試試看把它顛倒一下,負負得正,也許就很好了。

5. ROC曲線

ROC(Receiver Operating Characteristic curve)接受者操作特徵曲線。

上面我們都只是把從一組預測樣本得到的[FPR,TPR]作為一個點描述,並且我們知道閾值的改變會嚴重影響FPR和TPR,那麼,如果我們把所有可能的閾值都嘗試一遍,再把樣本集預測結果計算得到的所有[FPR,TPR]點都畫在坐標上,就會得到一個曲線:

一般閾值範圍是在0~1之間,1表示一個分類(男,或者有病),0表示另外一個分類(女,或者無病)。

在這個圖中,注意:

橫豎都不是閾值坐標軸,這裡沒有顯示閾值。藍色線更加靠近左上角,比紅色線更好。ROC曲線上左側的點好解釋,誤查率FPR越低,查出率TRP越高,自然是好的;但右上角的怎麼解釋?誤查率和查出率都很高。——想像一下,有個庸醫把閾值調的很高比如0.99,那麼導致算法推測出來的都是男生,沒有女生,這樣的情況當然查出率很高(所有男生都查出來了),誤查率也很高(所有女生都被當成男生了)。

6. AUC

ROC曲線的形狀不太好量化比較,於是就有了AUC。

AUC,Area under the Curve of ROC (AUC ROC),就是ROC曲線下面的面積。如上圖,藍色曲線下面的面積更大,也就是它的AUC更大。

如圖,左側的紅色折線覆蓋了下面整個方形面積,AUC=1;中間的曲線向左上方凸起,AUC=0.8;右邊的是完全隨機的結果,佔一半面積,AUC=0.5。

AUC面積越大,算法越好。

當我們寫好算法之後,可以用一個測試集來讓這個算法進行分類預測,然後我們繪製ROC曲線,觀察AUC面積,計算ACC精度,用這些來對算法的好壞進行簡單評估。

以上就是本文的全部內容,希望對大家的學習有所幫助。如果覺得文章不錯,動手轉發支持一下哦!

相關焦點

  • 機器學習中的AUC-ROC曲線
    AUC-ROC曲線你已經建立了你的機器學習模型-那麼接下來呢?你需要對它進行評估,並驗證它有多好(或有多壞),這樣你就可以決定是否實現它。這時就可以引入AUC-ROC曲線了。因此,分類器的AUC值越高,其區分正類和負類的能力就越好。AUC-ROC曲線是如何工作的在ROC曲線中,較高的X軸值表示假正例數高於真反例數。而Y軸值越高,則表示真正例數比假反例數高。因此,閾值的選擇取決於在假正例和假反例之間進行平衡的能力。讓我們深入一點,了解不同閾值下ROC曲線的形狀,以及特異性和敏感性的變化。
  • 機器學習備忘錄 | AUC值的含義與計算方法
    可以看出,使用 scikit-learn 工具提供的 roc_auc_score 函數計算 AUC 值相當簡單,只需要提供樣本的實際標籤和預測值這兩個變量即可,大大方便了我們的使用,真心感謝這些開源軟體的作者們!總的來說, AUC 值就是一個用來評價二分類模型優劣的常用指標, AUC 值越高通常表明模型的效果越好,在實際使用中我們可以藉助軟體包的相應函數進行快速計算。
  • AUC的一般計算和近似計算方式
    ROC曲線的橫軸是FPRate,縱軸是TPRate分類器給出預測的概率之後,我們需要設定已給閾值來把各個預測值劃分為預測為正/負。即,小於等於這個閾值的所有樣本預測為負,大於這個閾值的樣本預測為正。import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.metrics import roc_curve, auc# Calculate 'True Positive Rate' and 'False Positive Rate
  • 一文讀懂AUC-ROC
    英文原文:https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5在機器學習中,性能測量是一項重要任務。當涉及到分類問題時,我們依靠AUC  -  ROC曲線來做性能評測。當我們需要檢查或可視化多類分類問題的性能時,我們使用AUC(曲線下面積)和ROC(接收器操作特性)曲線。
  • Time-dependent ROC 曲線
    來自---真實世界大數據分析系列|ROC曲線與Time-dependent ROC 曲線對於常規的ROC曲線,在之前的筆記(理解ROC和AUC)中對其原理做了簡單的介紹,而time-dependent ROC曲線的原理與常規的ROC曲線比較類似,前者相比後者多了時間因素,以便我們可以根據不同時間節點繪製不同的ROC曲線本質上ROC曲線可以根據靈敏度和特異度兩個指標來繪製的
  • 從結構到性能,一文概述XGBoost、Light GBM和CatBoost的同與不同
    這裡的樣例(instance)表示觀測值/樣本。將所有的分類特徵值結果都根據以下公式,轉化為數值結果。其中 CountInClass 表示在當前分類特徵值中,有多少樣本的標記值是「1」;Prior 是分子的初始值,根據初始參數確定。TotalCount 是在所有樣本中(包含當前樣本),和當前樣本具有相同的分類特徵值的樣本數量。
  • ROC和AUC介紹以及如何計算AUC
    對於一個特定的分類器和測試數據集,顯然只能得到一個分類結果,即一組FPR和TPR結果,而要得到一個曲線,我們實際上需要一系列FPR和TPR的值,這又是如何得到的呢?每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:
  • 2021年經濟學統計學學手稿(一)
    將假陽率作為X軸,真陽率作為Y軸,使P取值從0到1可以得到一組點對應的一條連接左下和右上的曲線,其表示不同臨界p設定下對真陽率和假陽率的取捨,這點不難理解,就好比捕魚時隨著漁網變密,漏網之魚在減少,而撈出垃圾的概率也在增加。
  • 為什麼是AUC值而不是GSEA來挑選轉錄因子呢
    首先批量計算AUC值如果是單細胞轉錄組數據裡面,每個單細胞都是有一個geneLists,那麼就是成千上萬個這樣的calcAUC分析,非常耗費計算資源和時間,就需要考慮並行處理,我們這裡暫時不需要,所以直接 nCores=1 即可。
  • 一文搞定風控模型6大核心指標(附代碼)
    from sklearn.metrics import roc_auc_score, roc_curvedef get_auc(ytrue, yprob):    auc = roc_auc_score(ytrue, yprob)    if auc < 0.5:        auc = 1 - auc
  • 簡單粗暴理解與實現機器學習之邏輯回歸:邏輯回歸介紹、應用場景...
    AUC指標大小應用classification_report實現精確率、召回率計算應用roc_auc_score實現指標計算邏輯回歸介紹邏輯回歸(Logistic Regression)是機器學習中的一種分類模型,邏輯回歸是一種分類算法,雖然名字中帶有回歸,但是它與回歸之間有一定的聯繫。
  • 教你用BERT進行多標籤文本分類
    這一年裡,在這一領域中最激動人心的事件恐怕要數BERT的發布,這是一種基於多語言轉換器的模型,它已經在各種NLP項目中取得了令人矚目的成果。BERT是一種基於transformer架構的雙向模型,它以一種速度更快的基於Attention的方法取代了RNN(LSTM和GRU)的sequential屬性。
  • 數據挖掘之模型評估(均方誤差、精確率、召回率及ROC曲線的含義)
    RMSE可以看到,回歸問題的評價指標公式比較好理解,這裡不再贅述(其中f表示模型預測值,y表示真實值)。召回率F1值:是精確率和召回率的調和均值。F1值上面是關於分類問題各個指標的定義及公式,下面我們從一個例子來理解各個指標的含義。假如寵物店裡有10隻動物,其中6隻貓和4隻狗。現在將這10條數據放入一個分類器,做出分類結果如下:7隻貓,3隻狗。
  • AUC 的缺陷是什麼?
    目前普遍認為接收器工作特性(Receiver Operating Characteristic,ROC)曲線下的面積 ——AUC 是評估分類模型準確性的標準方法。在這篇手稿中,我們回顧了這一度量的一些特點,並將其作為模型結果的準確性的比較度量,對其可靠性提出了質疑。
  • 理解隨機森林:基於Python的實現和解釋
    要理解決策樹高方差的原因,我們可以將其看作是一個人。想像一下,你必須分析明日蘋果股票是否上漲,然後你決定去詢問幾位分析師。我們將衡量曲線下受試者工作特性曲線(ROC AUC),該度量的取值範圍為 0(最差)到 1(最好),隨機猜測的分數為 0.5。我們還可以繪製 ROC 曲線來評估模型的表現。引言提到的 Jupyter Notebook 包含了針對該任務的決策樹和隨機森林實現,但這裡我們只關注隨機森林。
  • 機器學習:基於sklearn的AUC的計算原理
    二、ROC曲線roc曲線:接收者操作特徵(receiveroperating characteristic),roc曲線上每個點反映著對同一信號刺激的感受性。三、繪製ROC曲線假設已經得出一系列樣本被劃分為正類的概率,然後按照大小排序,下圖是一個示例,圖中共有20個測試樣本,「Class」一欄表示每個測試樣本真正的標籤(p表示正樣本,n表示負樣本),「Score」表示每個測試樣本屬於正樣本的概率。
  • roc指標如何解讀 散戶們要注意以下幾點
    這裡小編我就給大家介紹一下roc指標的相關內容,看看roc指標如何解讀?提醒散戶們要注意以下幾點分析方法。roc指標如何解讀 ROC指標,又稱變動率指標,以交du易日當天的收盤價與其N天前的收盤價的差除以N天前的收盤價
  • ROC曲線應該怎麼看?
    Roc曲線,也稱「受試者工作特徵曲線」,或者感受性曲線,拋開這寫難記的名字不談,今天主要來談談它的用法以及如何解讀。應用場景ROC曲線主要是用於X對Y的預測準確率情況。ROC曲線ROC曲線圖是反映敏感性與特異性之間關係的曲線。