机器学习中的评价指标
基本概念介紹
1 混淆矩陣
2 準確率:
3 精準率:
4 召回率:
5 P-R曲線(查準率與查全率)
6 靈敏度與特異度
概率角度理解評價指標:
我們也可以從另一個角度考慮:條件概率。我們假設X為預測值,Y為真實值。那么就可以將這些指標按條件概率表示:
7 ROC曲線
TPR: 真正率 FPR:假正率
介紹下AUC原理
由于AUC關聯的內容比較多,面試時問得也非常細,因此,我們將按照以下順序對AUC進行重點介紹。
為什么要用AUC?
AUC與ROC?
AUC的實際含義及計算方法?
為什么要用AUC?
1. 為什么不用準確率(accuracy)?
在二分類中,如果正反例分布不平衡,而我們對minority class 更感興趣,這時accuracy評價指標基本沒有參考價值,比如欺詐檢測,癌癥檢測等場景。舉個栗子:
在測試集里,有100個sample,99個反例,只有1個正例。如果我的模型不分青紅皂白對任意一個sample都預測是反例,那么我的模型的accuracy是 正確的個數/總個數 = 99/100 = 99%。
2. 為什么不用召回率(recall)和精確率(precision)?
召回率:把實際為真值的判斷為真值的概率。
精確率:判斷為真值,判斷正確的概率(實際也為真值)。
recall = TP / (TP + FN)
precision = TP / (TP + FP)
一般說來,如果想要召回的多,精確率就要下降;想要精確率提升,召回的就少。因此,召回率與精確率是魚與熊掌不可兼得。
3. 為什么不用F1分數?
F1-score 可以看做是precision和recall的綜合評價指標,公式為:
問題就是,如果你的兩個模型,一個precision特別高,recall特別低,而另一個recall特別高,precision特別低的時候,F1-score可能是差不多的,你也不能基于此來作出選擇。
4. AUC適用場景
說到這里,終于講到我們的AUC了,它是一個用來評估分類模型性能的常見指標,優點是:
適用于正負樣本分布不一致的場景; 在負樣本數量遠遠大于正樣本數量的情況下,PR曲線更能反映分類器的好壞
對于分類器性能的評價,不限定單一的分類閾值;
不過,要真正理解地AUC,還要從ROC開始講起。
AUC與ROC?
ROC是什么?
ROC,全名叫做Receiver Operating Characteristic(受試者操作曲線),其主要分析工具是一個畫在二維平面上的曲線——ROC curve,其中,平面的橫坐標是假正率(FPR),縱坐標是真正率(TPR)。
幾個概念簡單解釋下:
真正率(TPR) = 靈敏度(Sensitivity) = 召回率:把實際為真值的判斷為真值的概率。
特異度(Specificity):把實際為假值的判斷為假值的概率。
假正率(FPR) = 1 - 特異度:把實際為假值的判斷為真值的概率。
TPR = TP / (TP+FN)
FPR = FP / (FP + TN
ROC曲線就是,在測試樣本上根據不同的分類器閾值,計算出一系列的(FPR,TPR)點集,將其在平面圖中連接成曲線,這就是ROC曲線。
畫roc曲線的一個例子
假設已經得出一系列樣本被劃分為正類的概率,然后按照大小排序,下圖是一個示例,圖中共有20個測試樣本,“Class”一欄表示每個測試樣本真正的標簽(p表示正樣本,n表示負樣本),“Score”表示每個測試樣本屬于正樣本的概率。
接下來,我們從高到低,依次將“Score”值作為閾值threshold,當測試樣本屬于正樣本的概率大于或等于這個threshold時,我們認為它為正樣本,否則為負樣本。舉例來說,對于圖中的第4個樣本,其“Score”值為0.6,那么樣本1,2,3,4都被認為是正樣本,因為它們的“Score”值都大于等于0.6,而其他樣本則都認為是負樣本。每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:
進一步理解ROC曲線
如下面這幅圖,(a)圖中實線為ROC曲線,線上每個點對應一個分類器閾值下(FPR,TPR)。
橫軸表示FPR,FPR越大,預測正類中實際負類越多。
縱軸表示TPR:正類覆蓋率,TPR越大,預測正類中實際正類越多。
ROC曲線必過(0, 0)和(1, 1)兩個點。
(1, 1)點含義:判分閾值為0,所有樣本都被預測為正樣本,TPR=1,FPR=1。
判分閾值逐漸增加,TPR和FPR同時減小。
(0, 0)點含義:判分閾值為1,所有樣本都預測為負樣本,TPR=0,FPR=0。
理想目標:TPR=1,FPR=0,即圖中(0,1)點,故ROC曲線越靠攏(0,1)點,越偏離45度對角線越好,Sensitivity、Specificity越大效果越好。
AUC與ROC的聯系
雖然,ROC曲線可以評測分類器的好壞,但是,人們總是希望能有一個具體數值來作為評價指標,于是Area Under roc Curve(AUC)就出現了。
顧名思義,AUC的值就是處于ROC curve下方的那部分面積的大小。通常,AUC的值介于0.5到1.0之間,較大的AUC代表了較好的performance。
AUC怎么計算?
AUC有什么實際含義呢?簡單來說其實就是,隨機抽出一對樣本(一個正樣本,一個負樣本),然后用訓練得到的分類器來對這兩個樣本進行預測,預測得到正樣本的概率大于負樣本概率的概率,這個概率值就是AUC。
有以下兩種方式計算AUC:
(1)方法一:
在有M個正樣本,N個負樣本的數據集里。一共有M*N對樣本(一對樣本即,一個正樣本與一個負樣本)。統計這M*N對樣本里,正樣本的預測概率大于負樣本的預測概率的個數。
計算復雜度:O(M*N)。
(2)方法二:
其中:
(1)M, N分別是正樣本和負樣本的個數;
(2)代表第i條樣本的序號。(概率得分從小到大排,排在第rank個位置)
(3)表示把正樣本的序號加起來。
AUC的計算主要以下幾種方法:
計算ROC曲線下的面積。這是比較直接的一種方法,可以近似計算ROC曲線一個個小梯形的面積。幾乎不會用這種方法
從AUC統計意義去計算。所有的正負樣本對中,正樣本排在負樣本前面占樣本對數的比例,即這個概率值。
具體的做法就是它也是首先對prob score從大到小排序,然后令最大prob score對應的sample 的rank為n,第二大score對應sample的rank為n-1,以此類推。然后把所有的正類樣本的rank相加,再減去M-1種兩個正樣本組合的情況。得到的就是所有的樣本中有多少對正類樣本的score大于負類樣本的score。最后再除以M×N。公式如下:
AUC計算代碼:
def calAUC(prob,labels):
f = list(zip(prob,labels))
rank = [values2 for values1,values2 in sorted(f,key=lambda x:x[0])]
rankList = [i+1 for i in range(len(rank)) if rank[i]==1]
posNum = 0
negNum = 0
for i in range(len(labels)):
if(labels[i]==1):
posNum+=1
else:
negNum+=1
auc = 0
auc = (sum(rankList)- (posNum*(posNum+1))/2)/(posNum*negNum)
print(auc)
return auc
參考文獻:1https://www.zhihu.com/question/30643044
2https://mp.weixin.qq.com/s/rfnMox5BEKhrBcpGRMvRVg
總結
以上是生活随笔為你收集整理的机器学习中的评价指标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于旋转(Rotation)
- 下一篇: 常州中医医院(常州中医院朱卫金)