本文整理了關於機器學習分類問題的評價指標——Confusion Matrix、ROC、AUC的概念以及理解。
混淆矩陣
在機器學習領域中,混淆矩陣(confusion matrix)是一種評價分類模型好壞的形象化展示工具。其中,矩陣的每一列表示的是模型預測的樣本情況;矩陣的每一行表示的樣本的真實情況。
舉個經典的二分類例子: 混淆表格:
混淆矩陣是除了ROC曲線和AUC之外的另一個判斷分類好壞程度的方法,通過混淆矩陣我們可以很清楚的看出每一類樣本的識別正誤情況。
混淆矩陣比模型的精度的評價指標更能夠詳細地反映出模型的”好壞”。模型的精度指標,在正負樣本數量不均衡的情況下,會出現容易誤導的結果。
基本概念
【1】True Positive
真正類(TP),樣本的真實類別是正類,並且模型識別的結果也是正類。
【2】False Negative
假負類(FN),樣本的真實類別是正類,但是模型將其識別成為負類。
【3】False Positive
假正類(FP),樣本的真實類別是負類,但是模型將其識別成為正類。
【4】True Negative
真負類(TN),樣本的真實類別是負類,並且模型將其識別成為負類。
評價指標(名詞翻譯來自機器學習實戰)
【1】Accuracy(精確率)
模型的精度,即模型識別正確的個數 / 樣本的總個數 。一般情況下,模型的精度越高,說明模型的效果越好。
【2*】Precision(正確率)
又稱為查准率,表示在模型識別為正類的樣本中,真正為正類的樣本所占的比例。 一般情況下,查准率越高,說明模型的效果越好。
關於Accuracy(精確率)和Precision(正確率)的區別:
分類精確率(Accuracy),不管是哪個類別,只要預測正確,其數量都放在分子上,而分母是全部數據數量,這說明精確率是對全部數據的判斷。
而正確率在分類中對應的是某個類別,分子是預測該類別正確的數量,分母是預測為該類別的全部數據的數量。
或者說,Accuracy是對分類器整體上的精確率的評價,而Precision是分類器預測為某一個類別的精確率的評價。
【3*】Recall(召回率)=Sensitivity(敏感指標,truepositive rate ,TPR)
=敏感性指標=查全率,表示的是,模型正確識別出為正類的樣本的數量占總的正類樣本數量的比值。 一般情況下,Recall越高,說明有更多的正類樣本被模型預測正確,模型的效果越好。
關於Precision(正確率)和Recall(召回率)的理解,套用網上的一個例子:
某池塘有1400條鯉魚,300只蝦,300只鱉。現在以捕鯉魚為目的,撒一大網,逮着了700條鯉魚,200只蝦,100只鱉。那么,這些指標分別如下:
正確率 = 700 / (700 +200 + 100) = 70%
召回率 = 700 / 1400 =50%
正確率和召回率是一對矛盾的度量。以上面這個捕魚的例子為例,如果希望將鯉魚盡可能多地捕出來,可以用大網把池塘里的東西都捕出來,那么鯉魚必然都被捕出來了,但這樣正確率會很低。
希望補出的鯉魚比例盡可能高,那么只捕最有把握的,這樣就難免會漏掉一些鯉魚,使得召回率較低。
通常只有在一些簡單任務中,才可能使得正確率和召回率都很高。
【4】Specificity
特異性指標,表示的是模型識別為負類的樣本的數量,占總的負類樣本數量的比值。
負正類率(false positive rate, FPR),計算公式為:FPR=FP/(TN+FP),計算的是模型錯識別為正類的負類樣本占所有負類樣本的比例,一般越低越好。
Specificity = 1 - FPR
【5】Fβ_Score
Fβ的物理意義就是將正確率和召回率的一種加權平均,在合並的過程中,召回率的權重是正確率的β倍。
F1分數認為召回率和正確率同等重要,
F2分數認為召回率的重要程度是正確率的2倍,更看重recall,即看重模型對正樣本的識別能力。
而F0.5分數認為召回率的重要程度是正確率的一半,更看重precision,即看重模型對負樣本的區分能力。
分類閾值對Precision/Recall的影響:
做二值分類時,我們認為,若h(x)>=0.5,則predict=1;若h(x)<0.5,則predict=0。這里0.5就是分類閾值。
增加閾值,我們會對預測值更有信心,即增加了查准率。但這樣會降低查全率。(High Precision, Low Recall)
減小閾值,則模型放過的真例就變少,查全率就增加。(Low Precision, High Recall)
實際應用:
(1)如果是做搜索,則要在保證召回率理想的情況下,提升准確率;
(2)如果做疾病監測、反垃圾,則是要保證准確率的條件下,提升召回率。
比較常用的是F1分數(F1 Score),是統計學中用來衡量二分類模型精確度的一種指標。
【6】F1_Score
數學定義:F1分數(F1_Score),又稱為平衡F分數(BalancedScore),它被定義為正確率和召回率的調和平均數。
β=1的情況,F1-Score的值是從0到1的,1是最好,0是最差。
回到上面二分類的例子:
那么多分類呢?
因此我們知道,計算Precision,Recall,Specificity等只是計算某一分類的特性,而Accuracy和F1-Score是判斷分類模型總體的標准。
sklearn中 F1-micro 與 F1-macro區別和計算原理
在sklearn中的計算F1的函數為 f1_score ,其中有一個參數average用來控制F1的計算方式,今天我們就說說當參數取micro和macro時候的區別。
'micro'
:Calculate metrics globally by counting the total true positives, false negatives and false positives.'micro':通過先計算總體的TP,FN和FP的數量,再計算F1
'macro'
:Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.'macro':分布計算每個類別的F1,然后做平均(各類別F1的權重相同)
詳見:https://www.cnblogs.com/techengin/p/8962024.html
ROC曲線
ROC曲線的橫坐標是前文提到的FPR(false positive rate),縱坐標是TPR(truepositive rate,召回率)。
放在具體領域來理解上述兩個指標。如在醫學診斷中,判斷有病的樣本。
- 那么盡量把有病的揪出來是主要任務,也就是第二個指標TPR,要越高越好。
- 而把沒病的樣本誤診為有病的,也就是第一個指標FPR,要越低越好。
不難發現,這兩個指標之間是相互制約的。如果某個醫生對於有病的症狀比較敏感,稍微的小症狀都判斷為有病,那么他的第一個指標應該會很高,但是第二個指標也就相應地變高。最極端的情況下,他把所有的樣本都看做有病,那么第一個指標達到1,第二個指標也為1。
我們可以看出
- 左上角的點(TPR=1,FPR=0),為完美分類,也就是這個醫生醫術高明,診斷全對。
- 點A(TPR>FPR),醫生A的判斷大體是正確的。中線上的點B(TPR=FPR),也就是醫生B全都是蒙的,蒙對一半,蒙錯一半;下半平面的點C(TPR<FPR),這個醫生說你有病,那么你很可能沒有病,醫生C的話我們要反着聽,為真庸醫。
- 曲線距離左上角越近,證明分類器效果越好。
為什么使用ROC曲線
既然已經這么多評價標准,為什么還要使用ROC和AUC呢?
因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨着時間變化。
AUC值
AUC(Area Under Curve)被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值范圍在0.5和1之間。使用AUC值作為評價標准是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。
- AUC = 1,是完美分類器,采用這個預測模型時,不管設定什么閾值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。
- 0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
- AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
- AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測。
計算AUC:
- 第一種方法:AUC為ROC曲線下的面積,那我們直接計算面積可得。面積為一個個小的梯形面積之和。計算的精度與閾值的精度有關。
- 第二種方法:根據AUC的物理意義,我們計算正樣本score大於負樣本的score的概率。取N*M(N為正樣本數,M為負樣本數)個二元組,比較score,最后得到AUC。時間復雜度為O(N*M)。
- 第三種方法:與第二種方法相似,直接計算正樣本score大於負樣本的概率。我們首先把所有樣本按照score排序,依次用rank表示他們,如最大score的樣本,rank=n(n=N+M),其次為n-1。那么對於正樣本中rank最大的樣本,rank_max,有M-1個其他正樣本比他score小,那么就有(rank_max-1)-(M-1)個負樣本比他score小。其次為(rank_second-1)-(M-2)。最后我們得到正樣本大於負樣本的概率為