機器學習中的AUC-ROC曲線
作者|ANIRUDDHA BHANDARI
編譯|VK
來源|Analytics Vidhya
AUC-ROC曲線
你已經建立了你的機器學習模型-那麼接下來呢?你需要對它進行評估,並驗證它有多好(或有多壞),這樣你就可以決定是否實現它。這時就可以引入AUC-ROC曲線了。
這個名字可能有點誇張,但它只是說我們正在計算“Receiver Characteristic Operator”(ROC)的“Area Under the Curve”(AUC)。
別擔心,我們會詳細瞭解這些術語的含義,一切都將是小菜一碟!
現在,只需知道AUC-ROC曲線可以幫助我們視覺化機器學習分類器的效能。雖然它只適用於二值分類問題,但我們將在最後看到如何擴充套件它來評估多類分類問題。
我們還將討論敏感性(sensitivity )和特異性(specificity )等主題,因為這些是AUC-ROC曲線背後的關鍵主題。
目錄
-
什麼是敏感性和特異性?
-
預測概率
-
AUC-ROC曲線是什麼?
-
AUC-ROC曲線是如何工作的?
-
Python中的AUC-ROC
-
用於多類分類的AUC-ROC
什麼是敏感性和特異性?
混淆矩陣:
從混淆矩陣中,我們可以得到一些在前面的文章中沒有討論過的重要度量。讓我們在這裡談談他們。
敏感度/真正例率/召回率
敏感度告訴我們什麼比例的正例得到了正確的分類。
一個簡單的例子是確定模型正確檢測到的實際病人的比例。
假反例率
假反例率(FNR)告訴我們什麼比例的正例被分類器錯誤分類。
更高的TPR和更低的FNR是可取的,因為我們希望正確地分類正類。
特異性/真反例率
特異性告訴我們什麼比例的反例類得到了正確的分類。
以敏感性為例,特異性意味著確定模型正確識別的健康人群比例。
假正例率
FPR告訴我們哪些負類被分類器錯誤分類。
更高的TNR和更低的FPR是可取的,因為我們想正確地分類負類。
在這些指標中,敏感性和特異性可能是最重要的,我們稍後將看到如何使用它們來構建評估指標。
但在此之前,我們先來了解一下為什麼預測概率比直接預測目標類要好。
預測概率
機器學習分類模型可以直接預測資料點的實際類別或預測其屬於不同類別的概率。
後者使我們對結果有更多的控制權。我們可以確定自己的閾值來解釋分類器的結果。這更為謹慎!
為資料點設定不同的分類閾值會無意中改變模型的敏感性和特異性。
其中一個閾值可能會比其他閾值給出更好的結果,這取決於我們的目標是降低假反例還是假正例的數量。
請看下錶:
度量值隨閾值的變化而變化。我們可以生成不同的混淆矩陣,並比較上一節中討論的各種度量。
但這樣做並不明智。相反,我們所能做的是在這些度量之間生成一個圖,這樣我們就可以很容易地看到哪個閾值給了我們一個更好的結果。
AUC-ROC曲線正好解決了這個問題!
AUC-ROC曲線是什麼?
ROC曲線是二值分類問題的一個評價指標。它是一個概率曲線,在不同的閾值下繪製TPR與FPR的關係圖,從本質上把“訊號”與“噪聲”分開。
曲線下面積(AUC)是分類器區分類的能力的度量,用作ROC曲線的總結。
AUC越高,模型在區分正類和負類方面的效能越好。
當AUC=1時,分類器能夠正確區分所有的正類點和負類點。然而,如果AUC為0,那麼分類器將預測所有的否定為肯定,所有的肯定為否定。
當0.5<AUC<1時,分類器很有可能區分正類值和負類值。這是因為與假反例和假正例相比,分類器能夠檢測更多的真正例和真反例。
當AUC=0.5時,分類器無法區分正類點和負類點。這意味著分類器要麼預測所有資料點的隨機類,要麼預測常量類。
因此,分類器的AUC值越高,其區分正類和負類的能力就越好。
AUC-ROC曲線是如何工作的
在ROC曲線中,較高的X軸值表示假正例數高於真反例數。而Y軸值越高,則表示真正例數比假反例數高。
因此,閾值的選擇取決於在假正例和假反例之間進行平衡的能力。
讓我們深入一點,瞭解不同閾值下ROC曲線的形狀,以及特異性和敏感性的變化。
我們可以嘗試通過為每個對應於閾值的點生成混淆矩陣來理解此圖,並討論分類器的效能:
A點是敏感性最高,特異性最低的地方。這意味著所有的正類點被正確分類,所有的負類點被錯誤分類。
事實上,藍線上的任何一點都對應於真正例率等於假正例率的情況。
這條線上的所有點都對應於屬於正類的正確分類點的比例大於屬於負類的錯誤分類點的比例的情況。
雖然B點與A點具有相同的敏感性,但具有較高的特異性。這意味著錯誤的負類點數量比上一個閾值要低。這表明此閾值比前一閾值好。
在C點和D點之間,在相同特異度下,C點的敏感性高於D點。這意味著,對於相同數量的錯誤分類的負類點,分類器預測的正類點數量更高。因此,C點的閾值優於D點。
現在,取決於我們要為分類器容忍多少錯誤的分類點,我們將在B點和C點之間進行選擇,以預測你是否可以在PUBG中擊敗我。
“錯誤的希望比恐懼更危險。”——J.R.R.托爾金
E點是特異性最高的地方。也就是說沒有假正例被模型分類。該模型能對所有的負類點進行正確的分類!如果我們的問題是給使用者提供完美的歌曲推薦,我們會選擇這一點。
按照這個邏輯,你能猜出一個完美的分類器對應的點在圖上的什麼位置嗎?
對!它將位於ROC圖的左上角,對應於笛卡爾平面中的座標(0,1)。在這裡,敏感性和特異性都將是最高的,分類器將正確地分類所有的正類點和負類點。
Python中的AUC-ROC曲線
現在,要麼我們可以手動測試每個閾值的敏感性和特異性,要麼讓sklearn為我們做這項工作。我們選擇sklearn
讓我們使用sklearn make_classification 方法建立任意資料:
我將在此資料集上測試兩個分類器的效能:
Sklearn有一個非常有效的方法roc_curve(),它可以在幾秒鐘內計算分類器的roc!它返回FPR、TPR和閾值:
可以使用sklearn的roc_auc_score()方法計算AUC得分:
0.9761029411764707 0.9233769727403157
我們還可以使用matplotlib繪製這兩種演算法的ROC曲線:
結果表明,Logistic迴歸ROC曲線的AUC明顯高於KNN-ROC曲線。因此,我們可以說logistic迴歸在分類資料集中的正類方面做得更好。
用於多類分類的AUC-ROC
就像我之前說過的,AUC-ROC曲線只適用於二元分類問題。但是,我們可以通過一對多技術將其擴充套件到多類分類問題。
因此,如果我們有三個類0、1和2,那麼class 0的ROC將如此生成,正例為類0,反例為非類0,也就是類1和類2。以此類推。
多類分類模型的ROC曲線可以確定如下:
結尾
我希望你發現本文有助於理解AUC-ROC曲線度量在衡量分類器效能方面的強大功能。你會在工業界,甚至在資料科學經常用到這個。最好熟悉一下!
原文連結:https://www.analyticsvidhya.com/blog/2020/06/auc-roc-curve-machine-learning/
歡迎關注磐創AI部落格站:
http://panchuang.net/
sklearn機器學習中文官方文件:
http://sklearn123.com/
歡迎關注磐創部落格資源彙總站:
http://docs.panchuang.net/