做者|ANIRUDDHA BHANDARI
編譯|VK
來源|Analytics Vidhyapython
你已經創建了你的機器學習模型-那麼接下來呢?你須要對它進行評估,並驗證它有多好(或有多壞),這樣你就能夠決定是否實現它。這時就能夠引入AUC-ROC曲線了。算法
這個名字可能有點誇張,但它只是說咱們正在計算「Receiver Characteristic Operator」(ROC)的「Area Under the Curve」(AUC)。機器學習
別擔憂,咱們會詳細瞭解這些術語的含義,一切都將是小菜一碟!性能
如今,只需知道AUC-ROC曲線能夠幫助咱們可視化機器學習分類器的性能。雖然它只適用於二值分類問題,但咱們將在最後看到如何擴展它來評估多類分類問題。學習
咱們還將討論敏感性(sensitivity )和特異性(specificity )等主題,由於這些是AUC-ROC曲線背後的關鍵主題。測試
什麼是敏感性和特異性?.net
預測機率3d
AUC-ROC曲線是什麼?code
AUC-ROC曲線是如何工做的?blog
Python中的AUC-ROC
用於多類分類的AUC-ROC
混淆矩陣:
從混淆矩陣中,咱們能夠獲得一些在前面的文章中沒有討論過的重要度量。讓咱們在這裏談談他們。
敏感度告訴咱們什麼比例的正例獲得了正確的分類。
一個簡單的例子是肯定模型正確檢測到的實際病人的比例。
假反例率(FNR)告訴咱們什麼比例的正例被分類器錯誤分類。
更高的TPR和更低的FNR是可取的,由於咱們但願正確地分類正類。
特異性告訴咱們什麼比例的反例類獲得了正確的分類。
以敏感性爲例,特異性意味着肯定模型正確識別的健康人羣比例。
FPR告訴咱們哪些負類被分類器錯誤分類。
更高的TNR和更低的FPR是可取的,由於咱們想正確地分類負類。
在這些指標中,敏感性和特異性多是最重要的,咱們稍後將看到如何使用它們來構建評估指標。
但在此以前,咱們先來了解一下爲何預測機率比直接預測目標類要好。
機器學習分類模型能夠直接預測數據點的實際類別或預測其屬於不一樣類別的機率。
後者使咱們對結果有更多的控制權。咱們能夠肯定本身的閾值來解釋分類器的結果。這更爲謹慎!
爲數據點設置不一樣的分類閾值會無心中改變模型的敏感性和特異性。
其中一個閾值可能會比其餘閾值給出更好的結果,這取決於咱們的目標是下降假反例仍是假正例的數量。
請看下錶:
度量值隨閾值的變化而變化。咱們能夠生成不一樣的混淆矩陣,並比較上一節中討論的各類度量。
但這樣作並不明智。相反,咱們所能作的是在這些度量之間生成一個圖,這樣咱們就能夠很容易地看到哪一個閾值給了咱們一個更好的結果。
AUC-ROC曲線正好解決了這個問題!
ROC曲線是二值分類問題的一個評價指標。它是一個機率曲線,在不一樣的閾值下繪製TPR與FPR的關係圖,從本質上把「信號」與「噪聲」分開。
曲線下面積(AUC)是分類器區分類的能力的度量,用做ROC曲線的總結。
AUC越高,模型在區分正類和負類方面的性能越好。
當AUC=1時,分類器可以正確區分全部的正類點和負類點。然而,若是AUC爲0,那麼分類器將預測全部的否認爲確定,全部的確定爲否認。
當0.5<AUC<1時,分類器頗有可能區分正類值和負類值。這是由於與假反例和假正例相比,分類器可以檢測更多的真正例和真反例。
當AUC=0.5時,分類器沒法區分正類點和負類點。這意味着分類器要麼預測全部數據點的隨機類,要麼預測常量類。
所以,分類器的AUC值越高,其區分正類和負類的能力就越好。
在ROC曲線中,較高的X軸值表示假正例數高於真反例數。而Y軸值越高,則表示真正例數比假反例數高。
所以,閾值的選擇取決於在假正例和假反例之間進行平衡的能力。
讓咱們深刻一點,瞭解不一樣閾值下ROC曲線的形狀,以及特異性和敏感性的變化。
咱們能夠嘗試經過爲每一個對應於閾值的點生成混淆矩陣來理解此圖,並討論分類器的性能:
A點是敏感性最高,特異性最低的地方。這意味着全部的正類點被正確分類,全部的負類點被錯誤分類。
事實上,藍線上的任何一點都對應於真正例率等於假正例率的狀況。
這條線上的全部點都對應於屬於正類的正確分類點的比例大於屬於負類的錯誤分類點的比例的狀況。
雖然B點與A點具備相同的敏感性,但具備較高的特異性。這意味着錯誤的負類點數量比上一個閾值要低。這代表此閾值比前一閾值好。
在C點和D點之間,在相同特異度下,C點的敏感性高於D點。這意味着,對於相同數量的錯誤分類的負類點,分類器預測的正類點數量更高。所以,C點的閾值優於D點。
如今,取決於咱們要爲分類器容忍多少錯誤的分類點,咱們將在B點和C點之間進行選擇,以預測你是否能夠在PUBG中擊敗我。
「錯誤的但願比恐懼更危險。」——J.R.R.托爾金
E點是特異性最高的地方。也就是說沒有假正例被模型分類。該模型能對全部的負類點進行正確的分類!若是咱們的問題是給用戶提供完美的歌曲推薦,咱們會選擇這一點。
按照這個邏輯,你能猜出一個完美的分類器對應的點在圖上的什麼位置嗎?
對!它將位於ROC圖的左上角,對應於笛卡爾平面中的座標(0,1)。在這裏,敏感性和特異性都將是最高的,分類器將正確地分類全部的正類點和負類點。
如今,要麼咱們能夠手動測試每一個閾值的敏感性和特異性,要麼讓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曲線只適用於二元分類問題。可是,咱們能夠經過一對多技術將其擴展到多類分類問題。
所以,若是咱們有三個類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/