1. 程式人生 > >資料不平衡時分類器效能評價(ROC曲線)

資料不平衡時分類器效能評價(ROC曲線)

大家在將統計學習方法用於實際應用時,不免會遇到各類間資料不太平衡的情況。比如垃圾郵件的識別、稀有病情的診斷、詐騙電話識別、情感分析等等情況。導致資料不平衡的原因有很多,有可能是因為不恰當的取樣方法,也可能真實的資料分佈就是如此;然而真實的資料分佈在大多數情況下我們是無從得知的,於是我們只好認為我們所取得的樣本是“真實”的,再從中進行學習。那麼針對資料不平衡有很多研究點,最近稍微調研了一下,這也算是一個比較老的Topic了。2000 AAAI/2003 ICML先後有兩次Workshop對此進行討論,之後似乎研究的人就比較少了。
本文主要關注的是在類間資料不平衡的情況下,如何評價分類器的效能?至於這個問題本身的更詳細分析,只要在google scholar中搜索“Learning from Imbalance data”就會看一堆資料了,我也看了一些,但是不細緻,最近實在是很忙。
在AAAI(2000) Workshop上,有兩個問題最受關注。
1:在類不平衡(class imbalances)的情況下,如何評價學習演算法的效能?
2:類不平衡與代價敏感學習(cost-sensitive Learning)的關係。
今天稍微研究了一下第一個問題。既然要評價,那麼也就默認了一個前提假設:類樣本不平衡是符合實際資料分佈的(訓練集和測試集同分布)。要評價一個二元分類器的效能,人們自然而然地想到Accuracy。而對於不平衡資料,這是否合適?看一個簡單的例子:假設這個世界上有99.9%的人不患癌症,0.01%的人身患癌症。於是我們想設計一個分類器,來判斷一個病人是否身患癌症。那麼在已有先驗知識的情況下,我只需要認為所有病人都不患癌症,那麼分類器至少能達到99.9%的分類準確率。顯然,這個分類器一點兒價值也沒有。同理,對於n:1(n比較大)的類樣本分佈,只需要認為所有樣本都屬於n那一類,準確率就可以達到非常高,可是沒有任何意義和參考價值。所以,Accuracy的衡量標準在這裡是不合適的。

ROC分析為這個問題提供了一個比Accuracy更為準確的度量方式:)

ROC曲線有個很好的特性:當測試集中的正負樣本的分佈變化的時候,ROC曲線能夠保持不變。

先簡單看一下混淆矩陣(confusion matrix)。混淆矩陣是評估分類器可信度的一個基本工具。以二元分類器為研究物件,下面的混淆矩陣顯示了一個分類器可能遇到的所有情況:


 
其中列對應於樣本實際的類別,行對應於樣本被預測的類別。這四個基本指標可以衍生出多個分類器指標:
1:FP rate = FP / N;N為負樣本數
2:TP rate = TP / P;P為正樣本數
3:Accuracy = (TP + TN) / (P + N);//我們一般用的
4:Precision = TP / (TP + FP)
5:Recall = TP / P
6:F-score = Precision * Recall
其中Accuracy是我們最經常使用的,在某些領域,Precision/Recall也很頻繁。
以上這些都屬於靜態的評價指標,如前所述,當正負樣本不平衡時存在嚴重的問題。
於是,ROC曲線和AUC(曲線包圍面積)應運而生。
ROC曲線描述的是混淆矩陣中FPR(FP rate)和TPR兩個量之間的相對變化關係。如果二元分類器給出的是對正樣本的一個分類概率,那麼通過設定不同的閾值,可以得到不同的混淆矩陣,而每個混淆矩陣都對應於ROC曲線上的一個點。將這些點描繪出來可以得到一條平滑的曲線,這時,我們可以用曲線所包圍的面積,即AUC,來評估該二元分類器的可信度。這就是ROC分析,說完啦。看一幅來自Wikipedia的圖:


橫軸為FPR,縱軸為TPR。如果混淆矩陣表示的點(FPR,TPR)處在中間那根紅線上,則表示該分類器沒有區分能力。以前面的n:1為例,如果分類器簡單地把所有樣本分至n這一類,則正好處在右上角,即(1, 1)。再試想一下資料平衡1:1的情況,當分類器處於紅線上時,容易計算出Accuracy為50%,對於二元分類器而言,沒有什麼比準確率低於50%更丟人的事情了……
所以,點若處在左上角部分,則說明分類器效能不錯,若不幸在右下角,那麼這個分類器無疑是一坨。。
我們根據不同的閾值得到了ROC曲線之後:


可以通過計算該曲線所包圍的面積(AUC)來衡量分類器的可信度。面積越大,則可信度越高。不過面積可不好計算,因為我們得到的都是離散點。對此有興趣的話,可以參考下這篇文章(ICML 2006)
The Relationship Between Precision-Recall and ROC Curves
這篇文章附著一個計算AUC的Java工具包:http://mark.goadrich.com/programs/AUC/
一般認為,對於一個診斷實驗,AUC在0.5~0.7之間時,診斷價值較低;在0.7~0.9之間,診斷價值中等;在0.9以上時診斷價值較高。這是醫學診斷上的經驗了,對於其他領域的分類器如何,還需要在實踐中摸索。