今天是機器學習專題的第18篇文章,我們來看看機器學習領域當中,非常重要的其他幾個指標。 混淆矩陣在上一篇文章當中,我們在介紹召回率、準確率這些概念之前,先講了TP、FP、FN、和FP這幾個值。我們再來簡單地回顧一下,我們不能死記硬背這幾個指標,否則很容易搞錯,并且還容易搞混。我們需要從英文入手來理解,其中的T表示真,可以理解成預測正確,F表示假,也就是預測錯誤。而P和N表示positive和negative,也就是陰和陽,或者是0和1,也就是兩個不同的類別。 既然是兩個類別,那么顯然說明了我們的這些指標針對的是二分類的場景,也是機器學習當中最常見的場景。 混淆矩陣其實本質上就是將這四個值展示在一個表格當中,這樣方便我們觀察結果做出分析。 我們舉個例子: 假設某一個模型的預測結果的混淆矩陣是這樣,我們從上面展示的數據當中很容易就分析出,我們預測的錯誤主要發生在49這一格,也就是假陰性這一格。也就是說模型將大量的陽性樣本預測成了陰性,說明模型的閾值設置得過高,我們可以嘗試降低閾值來提升擴大召回。 反之,如果假陽性的樣本太多,則說明模型的閾值過低,將大量陰性的樣本預測成了陽性。我們想要提升模型的效果,可以考慮提升一下模型分類的閾值。 那如果假陽和假陰都很多該怎么辦? 這種情況也很多,一般情況下是由于模型沒有完全收斂,或者是模型不夠強大。比如特征過多,特征當中很多隱藏的信息沒有能夠學習到。這個時候可以考慮使用更加復雜的模型,比如神經網絡或者是XGboost這種較為強力的模型。如果模型本身已經足夠復雜,那么可能是訓練的時候的樣本數量不夠多,導致模型的能力無法完全發揮,這個時候可以考慮增加一些樣本。 理解了混淆矩陣的概念和用途之后,我們就可以進一步來看ROC了。 ROCROC的英文是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的曲線,大概是下面這個樣子。 理解了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的可能性就很高,尤其是考察候選人基礎能力的時候。如果被問到,光理解它是什么意思是不夠的,我們還需要掌握它的應用場景,它的前因后果,甚至能夠進行發散思考一些之前沒有想過的問題。 |
|
來自: taotao_2016 > 《歷史》