二分類模型預測的結果是否足夠好,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精度,用這些來對算法的好壞進行簡單評估。
以上就是本文的全部內容,希望對大家的學習有所幫助。如果覺得文章不錯,動手轉發支持一下哦!