五分鐘秒懂機器學習混淆矩陣、ROC和AUC

本文始發於我的公衆號:TechFlow,原創不易,求個關注web


今天是機器學習專題的第18篇文章,咱們來看看機器學習領域當中,很是重要的其餘幾個指標。網絡

混淆矩陣

在上一篇文章當中,咱們在介紹召回率、準確率這些概念以前,先講了TP、FP、FN、和FP這幾個值。咱們再來簡單地回顧一下,咱們不能死記硬背這幾個指標,不然很容易搞錯,而且還容易搞混。咱們須要從英文入手來理解,其中的T表示真,能夠理解成預測正確,F表示假,也就是預測錯誤。而P和N表示positive和negative,也就是陰和陽,或者是0和1,也就是兩個不一樣的類別。機器學習

既然是兩個類別,那麼顯然說明了咱們的這些指標針對的是二分類的場景,也是機器學習當中最多見的場景。編輯器

混淆矩陣其實本質上就是將這四個值展現在一個表格當中,這樣方便咱們觀察結果作出分析。學習

咱們舉個例子:spa

假設某一個模型的預測結果的混淆矩陣是這樣,咱們從上面展現的數據當中很容易就分析出,咱們預測的錯誤主要發生在49這一格,也就是假陰性這一格。也就是說模型將大量的陽性樣本預測成了陰性,說明模型的閾值設置得太高,咱們能夠嘗試下降閾值來提高擴大召回。翻譯

反之,若是假陽性的樣本太多,則說明模型的閾值太低,將大量陰性的樣本預測成了陽性。咱們想要提高模型的效果,能夠考慮提高一下模型分類的閾值。3d

若是假陽和假陰都不少該怎麼辦?blog

這種狀況也不少,通常狀況下是因爲模型沒有徹底收斂,或者是模型不夠強大。好比特徵過多,特徵當中不少隱藏的信息沒有可以學習到。這個時候能夠考慮使用更加複雜的模型,好比神經網絡或者是XGboost這種較爲強力的模型。若是模型自己已經足夠複雜,那麼多是訓練的時候的樣本數量不夠多,致使模型的能力沒法徹底發揮,這個時候能夠考慮增長一些樣本。排序

理解了混淆矩陣的概念和用途以後,咱們就能夠進一步來看ROC了。

ROC

ROC的英文是receiver operating characteristic curve,翻譯過來是接受者操做特徵曲線,這是一個從信號系統學科當中遷移過來的一個概念。老實講我不太瞭解信號系統,不太清楚它本來的含義,可是在機器學習當中,它是反應TPR和FPR的曲線。

標一下關鍵點,TPR和FPR以及曲線。這裏的TRP就是True Positive Rate,也就是真陽率,這裏的FPR是假陽率。

所謂的真陽率也就是召回率,也就是全部陽性樣本當中被咱們預測成陽性的比例

FPR天然就是False Positive Rate,也就是假陽率,是全部陰性樣本當中被預測成陽性的比例。分母顯然是FP,分子是FP + TN。

建議你們不要把TPR理解成recall,雖然它的確就是recall可是若是你記成recall的話,會增長記憶成本。橫軸和縱軸記成FPR和TPR比較好記。

因此ROC曲線就是橫軸是FPR縱軸是TPR的曲線,大概是下面這個樣子。

AUC

理解了ROC以後,AUC就容易了。由於AUC徹底源於ROC,它的英文是Area under curve,也就是ROC曲線當中曲形的面積。

那麼,這個ROC是怎麼算出來的呢?

咱們來舉一個例子,假設咱們如今有一系列預測結果:

咱們列一下這個模型的混淆矩陣:

咱們代入算一下FPR和TPR,能夠獲得TPR是3 / (3 + 2) = 0.6,對應的FPR是1 / (1 + 4) = 0.2。

咱們把這個點代入ROC曲線,能夠獲得:

看起來像是那麼回事了,但仍是有些怪怪的,這看起來也不像是一個曲線呀。這是由於咱們模型預測的結果直接拿的是01值,對於一些硬分類器,好比SVM和貝葉斯,0就是0,1就是1,咱們獲得的就是這樣一個折線圖。但若是是一些根據閾值劃分結果的軟分類器,好比LR、GBDT等,咱們獲得的就是一個浮點值,咱們調整閾值就會獲得不一樣的結果,就會更加像是曲線。

咱們還用剛纔的樣本舉例:

此次的結果是一個浮點值,結果就不同了。因爲預測結果是一個浮點值,咱們設置不一樣的閾值就會獲得不一樣的混淆矩陣

好比,若是咱們設置閾值爲0.5,獲得的混淆矩陣以下:

這樣算出來的TPR和FPR分別是0.8,0.4。若是咱們進一步放寬閾值,能夠提高召回,也就是提高TPR,但與此同時FPR也會提高。好比若是咱們把閾值放寬到0.2,咱們能夠識別出全部的正例,可是一樣的,FPR也會上升:

根據上面這個混淆矩陣計算得出的結果TPR是1.0,FPR是0.6。也就是說咱們選擇不一樣的閾值會獲得不一樣的TPR,和FPR。若是樣本較少的話,畫出來的ROC多是鋸齒形

當樣本的數量足夠多以後,鋸齒會變得愈來愈光滑,咱們能夠再用上一些平滑的方法,能夠獲得一個相對光滑的曲線,就變成了上面那張圖:

深度理解

如今咱們搞清楚了AUC的概念,AUC就是ROC曲線圍成的圖形面積。而ROC曲線上每個點都是經過不一樣的閾值計算獲得的點。

咱們結合一下AUC的圖像以及上面的例子來深度理解一下這個概念,對於AUC曲線而言,咱們發現它是單調遞增的。也就是說FPR越大,對應的TPR也就越大。這個是比較直觀的,由於FPR越大,說明咱們把更多的樣本預測成了正例,那麼顯然TPR也就越大。也就是說咱們召回的正樣本變多了,比例也就變多了。

當FPR=1的時候TPR也等於1,這個點代表咱們把全部的樣本都預測成了正例。顯然在這種狀況下,全部的正例都被預測對了,TPR天然就是1。咱們再來看另一個極值點,也就是FPR等於0的點。

FPR等於0代表了假陰率爲0,也就是說沒有一個負樣本被預測錯,也就對應着模型預測爲正例的樣本數很是少。因此FPR這個點對應的TPR越高,每每說明模型的效果越好。

咱們理解了AUC的概念以後,免不了問一個問題,AUC這個值究竟表明了什麼呢,可以反映什麼結果呢?

咱們來看下面這張圖:

下面這張圖中的綠線圍成的面積明顯大於粉線,也就是AUC1 > AUC2。從這張圖咱們能夠看出,AUC越大,說明曲線圍成的面積越大,若是咱們選擇0-1當中去一個點作垂線,能夠獲得相同FPR下,一般AUC越大的,對應的TPR也越大(有反例,見下圖)。

TPR越大說明模型能夠在分錯一樣數量負樣本的狀況下預測正確更多的正樣本,這表明了模型區分正負樣本的能力

爲何要比較AUC而不是設定一個閾值比較TPR呢?

由於有些時候模型的狀況比較複雜,好比下面這張圖:

在p點之前紫色模型的效果明顯更好,可是p點以後就是粉紅色的模型更好了。若是只憑單個點的狀況,咱們很難反應模型總體的能力。因此用AUC能夠衡量模型總體上區分正負樣本的能力。

最後咱們來思考一個問題,AUC最壞的狀況是多少?會是0嗎?

錯了,AUC最壞的狀況是0.5。由於若是是隨機猜想正負例,那麼咱們猜想正確的正例數量應該永遠佔當前猜想數量的0.5,在這種狀況下TPR和FPR一直相等,也就是咱們畫出來的是一條直線,好比下圖:

若是算出來的AUC小於0.5怎麼辦?說明模型可能學習到了樣本和特徵之間負相關的關係,咱們能夠試着調換一下0和1兩個類別,算出來的AUC應該能變成0.5以上。

總結

在前面的文章當中咱們曾經說過,在機器學習的使用場景當中,咱們每每更加看重正例。好比廣告的點擊率預測、搜索排序、推薦等等這些場景下,咱們更加關注用戶點擊行爲的發生和預測準確狀況,而不太關心沒有點擊是否預測準確。在這些場景當中,咱們衡量精確度或者是召回其實不是特別重要,尤爲這種涉及排序、擺放位置調整的場景,咱們更加在乎模型是否可以把高質量的內容給出一個高的預測分,讓它可以排在前面,讓用戶優先看到。這個時候每每AUC更加可以說明模型的能力。

也所以,相比於精確度、準確度和召回率,在實際的工業應用場景當中,咱們可能使用AUC更多一些。固然這並不是是說其餘概念不重要,這主要仍是應用場景決定的。既然應用場景決定了使用AUC的範圍很廣,那麼當咱們去應聘崗位的時候,問到AUC的可能性就很高,尤爲是考察候選人基礎能力的時候。若是被問到,光理解它是什麼意思是不夠的,咱們還須要掌握它的應用場景,它的來龍去脈,甚至可以進行發散思考一些以前沒有想過的問題。

但願你們都能有所收穫,原創不易,厚顏求個贊和轉發,讓咱們爲了成爲更優秀的本身而努力。

相關文章
相關標籤/搜索