標籤:

全面梳理:準確率,精確率,召回率,查准率,查全率,假陽性,真陽性,PRC,ROC,AUC,F1

二分類問題的結果有四種:

邏輯在於,你的預測是positive-1和negative-0,true和false描述你本次預測的對錯

true positive-TP:預測為1,預測正確即實際1

false positive-FP:預測為1,預測錯誤即實際0

true negative-TN:預測為0,預測正確即實際0

false negative-FN:預測為0,預測錯誤即實際1

【混淆矩陣】

直觀呈現以上四種情況的樣本數

【準確率】accuracy

正確分類的樣本/總樣本:(TP+TN)/(ALL)

在不平衡分類問題中難以準確度量:比如98%的正樣本只需全部預測為正即可獲得98%準確率

【精確率】【查准率】precision

TP/(TP+FP):在你預測為1的樣本中實際為1的概率

查准率在檢索系統中:檢出的相關文獻與檢出的全部文獻的百分比,衡量檢索的信噪比

【召回率】【查全率】recall

TP/(TP+FN):在實際為1的樣本中你預測為1的概率

查全率在檢索系統中:檢出的相關文獻與全部相關文獻的百分比,衡量檢索的覆蓋率

實際的二分類中,positive-1標籤可以代表健康也可以代表生病,但一般作為positive-1的指標指的是你更關注的樣本表現,比如「是垃圾郵件」「是陽性腫瘤」「將要發生地震」。

因此在腫瘤判斷和地震預測等場景:

要求模型有更高的【召回率】recall,是個地震你就都得給我揪出來不能放過

在垃圾郵件判斷等場景:

要求模型有更高的【精確率】precision,你給我放進回收站里的可都得確定是垃圾,千萬不能有正常郵件啊

【ROC】

常被用來評價一個二值分類器的優劣

ROC曲線的橫坐標為false positive rate(FPR):FP/(FP+TN)

假陽性率,即實際無病,但根據篩檢被判為有病的百分比。

在實際為0的樣本中你預測為1的概率

縱坐標為true positive rate(TPR):TP/(TP+FN)

真陽性率,即實際有病,但根據篩檢被判為有病的百分比。

在實際為1的樣本中你預測為1的概率,此處即【召回率】【查全率】recall

接下來我們考慮ROC曲線圖中的四個點和一條線。

第一個點,(0,1),即FPR=0,TPR=1,這意味著無病的沒有被誤判,有病的都全部檢測到,這是一個完美的分類器,它將所有的樣本都正確分類。

第二個點,(1,0),即FPR=1,TPR=0,類似地分析可以發現這是一個最糟糕的分類器,因為它成功避開了所有的正確答案。

第三個點,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,沒病的沒有被誤判但有病的全都沒被檢測到,即全部選0

類似的,第四個點(1,1),分類器實際上預測所有的樣本都為1。

經過以上的分析可得到:ROC曲線越接近左上角,該分類器的性能越好。

【ROC是如何畫出來的】

分類器有概率輸出,50%常被作為閾值點,但基於不同的場景,可以通過控制概率輸出的閾值來改變預測的標籤,這樣不同的閾值會得到不同的FPR和TPR。

從0%-100%之間選取任意細度的閾值分別獲得FPR和TPR,對應在圖中,得到的ROC曲線,閾值的細度控制了曲線的階梯程度或平滑程度。

一個沒有過擬合的二分類器的ROC應該是梯度均勻的,如圖紫線

此圖為PRC, precision recall curve,原理類似

ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。而Precision-Recall曲線會變化劇烈,故ROC經常被使用。

【AUC】

AUC(Area Under Curve)被定義為ROC曲線下的面積,完全隨機的二分類器的AUC為0.5,雖然在不同的閾值下有不同的FPR和TPR,但相對面積更大,更靠近左上角的曲線代表著一個更加穩健的二分類器。

同時針對每一個分類器的ROC曲線,又能找到一個最佳的概率切分點使得自己關注的指標達到最佳水平。

【AUC的排序本質】

大部分分類器的輸出是概率輸出,如果要計算準確率,需要先把概率轉化成類別,就需要手動設置一個閾值,而這個超參數的確定會對優化指標的計算產生過於敏感的影響

AUC從Mann–Whitney U statistic的角度來解釋:隨機從標籤為1和標籤為0的樣本集中分別隨機選擇兩個樣本,同時分類器會輸出兩樣本為1的概率,那麼我們認為分類器對「標籤1樣本的預測概率>對標籤0樣本的預測概率 」的概率等價於AUC。

因而AUC反應的是分類器對樣本的排序能力,這樣也可以理解AUC對不平衡樣本不敏感的原因了。

【作為優化目標的各類指標】

最常用的分類器優化及評價指標是AUC和logloss,最主要的原因是:不同於accuracy,precision等,這兩個指標不需要將概率輸出轉化為類別,而是可以直接使用概率進行計算。

順便貼上logloss的公式

  • N:樣本數
  • M:類別數,比如上面的多類別例子,M就為4
  • yij:第i個樣本屬於分類j時為為1,否則為0
  • pij:第i個樣本被預測為第j類的概率

【F1】

F1兼顧了分類模型的準確率和召回率,可以看作是模型準確率和召回率的調和平均數,最大值是1,最小值是0。

額外補充【AUC為優化目標的模型融合手段rank_avg】:

在拍拍貸風控比賽中,印象中一個前排隊伍基於AUC的排序本質,使用rank_avg融合了最後的幾個基礎模型。

rank_avg這種融合方法適合排序評估指標,比如auc之類的

其中weight_i為該模型權重,權重為1表示平均融合

rank_i表示樣本的升序排名 ,也就是越靠前的樣本融合後也越靠前

能較快的利用排名融合多個模型之間的差異,而不用去加權樣本的概率值融合

貼一段源碼:

#三模型的概率輸出xgb_7844 = pd.read_csv(xgb_7844.csv)svm_771 = pd.read_csv(svm_771.csv)xgb_787 = pd.read_csv(xgb_787.csv)#score概率變為排名xgb_7844.score = xgb_7844.score.rank()svm_771.score = svm_771.score.rank()xgb_787.score = xgb_787.score.rank()#排名加權融合的結果喪失了概率指義,但AUC的計算不用關係絕對大小,只關心相對大小pred = 0.7*xgb_787.score + 0.2*xgb_7844.score + 0.1*svm_771.score#AUC的計算auc = int(roc_auc_score(val.target.values,pred.values)*10000)

M為正類樣本的數目,N為負類樣本的數目,rank為分類器給出的排名。

可以發現整個計算過程中連直接的概率輸出值都不需要,僅關心相對排名,所以只要保證submit的那一組輸出的rank是有意義的即可,並不一定需要必須輸出概率。

推薦閱讀:

我的機器學習計算資源
斯坦福大學機器學習課程(介紹和線性回歸)
機器學習基石筆記1:基礎概念
全面理解word2vec
使用Tensorflow C++ API自定義操作

TAG:機器學習 |