熱線電話:13121318867

登錄
首頁精彩閱讀在機器學習分類中如何處理訓練集中不平衡問題
在機器學習分類中如何處理訓練集中不平衡問題
2018-04-01
收藏

機器學習分類中如何處理訓練集中不平衡問題

很多機器學習任務中,訓練集中可能會存在某個或某些類別下的樣本數遠大于另一些類別下的樣本數目。即類別不平衡,為了使得學習達到更好的效果,因此需要解決該類別不平衡問題。

??當你在對一個類別不均衡的數據集進行分類時得到了90%的準確度(Accuracy)。當你進一步分析發現,數據集的90%的樣本是屬于同一個類,并且分類器將所有的樣本都分類為該類。在這種情況下,顯然該分類器是無效的。并且這種無效是由于訓練集中類別不均衡而導致的。
??首先舉幾個所收到的郵件中關于類別不均衡的例子:
    在一個二分類問題中,訓練集中class 1的樣本數比class 2的樣本數是60:1。使用邏輯回歸進行分類,最后結果是其忽略了class 2,即其將所有的訓練樣本都分類為class 1。
    在分類任務的數據集中,有三個類別,分別為A,B,C。在訓練集中,A類的樣本占70%,B類的樣本占25%,C類的樣本占5%。最后我的分類器對類A的樣本過擬合了,而對其它兩個類別的樣本欠擬合。
什么是類別不均衡問題
??類別數據不均衡是分類任務中一個典型的存在的問題。簡而言之,即數據集中,每個類別下的樣本數目相差很大。例如,在一個二分類問題中,共有100個樣本(100行數據,每一行數據為一個樣本的表征),其中80個樣本屬于class 1,其余的20個樣本屬于class 2,class 1:class2=80:20=4:1,這便屬于類別不均衡。當然,類別不均衡問同樣會發生在多分類任務中。它們的解決方法是一樣的。因此,為了便于討論與理解,我們從二分類任務入手進行講解。
類別不均衡問題是現實中很常見的問題
??大部分分類任務中,各類別下的數據個數基本上不可能完全相等,但是一點點差異是不會產生任何影響與問題的。
??在現實中有很多類別不均衡問題,它是常見的,并且也是合理的,符合人們期望的。如,在欺詐交易識別中,屬于欺詐交易的應該是很少部分,即絕大部分交易是正常的,只有極少部分的交易屬于欺詐交易。這就是一個正常的類別不均衡問題。又如,在客戶流失的數據集中,絕大部分的客戶是會繼續享受其服務的(非流失對象),只有極少數部分的客戶不會再繼續享受其服務(流失對象)。一般而已,如果類別不平衡比例超過4:1,那么其分類器會大大地因為數據不平衡性而無法滿足分類要求的。因此在構建分類模型之前,需要對分類不均衡性問題進行處理。
??在前面,我們使用準確度這個指標來評價分類質量,可以看出,在類別不均衡時,準確度這個評價指標并不能work。因為分類器將所有的樣本都分類到大類下面時,該指標值仍然會很高。即,該分類器偏向了大類這個類別的數據。
八大解決方法
    可以擴大數據集嗎?
    ??當遇到類別不均衡問題時,首先應該想到,是否可能再增加數據(一定要有小類樣本數據),更多的數據往往戰勝更好的算法。因為機器學習是使用現有的數據多整個數據的分布進行估計,因此更多的數據往往能夠得到更多的分布信息,以及更好分布估計。即使再增加小類樣本數據時,又增加了大類樣本數據,也可以使用放棄一部分大類數據(即對大類數據進行欠采樣)來解決。
    嘗試其它評價指標
    ??從前面的分析可以看出,準確度這個評價指標在類別不均衡的分類任務中并不能work,甚至進行誤導(分類器不work,但是從這個指標來看,該分類器有著很好的評價指標得分)。因此在類別不均衡分類任務中,需要使用更有說服力的評價指標來對分類器進行評價。如何對不同的問題選擇有效的評價指標參見這里。
    ??上面的超鏈接中的文章,講述了如何對乳腺癌患者復發類別不均衡數據進行分類。在文中,推薦了幾個比傳統的準確度更有效的評價指標:
        混淆矩陣(Confusion Matrix):使用一個表格對分類器所預測的類別與其真實的類別的樣本統計,分別為:TP、FN、FP與TN。
        精確度(Precision)
        召回率(Recall)
        F1得分(F1 Score):精確度與找召回率的加權平均。
    ??特別是:
        Kappa (Cohen kappa)
        ROC曲線(ROC Curves):見Assessing and Comparing Classifier Performance with ROC Curves
    對數據集進行重采樣
    ??可以使用一些策略該減輕數據的不平衡程度。該策略便是采樣(sampling),主要有兩種采樣方法來降低數據的不平衡性。
        對小類的數據樣本進行采樣來增加小類的數據樣本個數,即過采樣(over-sampling ,采樣的個數大于該類樣本的個數)。
        對大類的數據樣本進行采樣來減少該類數據樣本的個數,即欠采樣(under-sampling,采樣的次數少于該類樣本的個素)。

    ??采樣算法往往很容易實現,并且其運行速度快,并且效果也不錯。更詳細的內容參見這里。
    ??一些經驗法則:
        考慮對大類下的樣本(超過1萬、十萬甚至更多)進行欠采樣,即刪除部分樣本;
        考慮對小類下的樣本(不足1為甚至更少)進行過采樣,即添加部分樣本的副本;
        考慮嘗試隨機采樣與非隨機采樣兩種采樣方法;
        考慮對各類別嘗試不同的采樣比例,比一定是1:1,有時候1:1反而不好,因為與現實情況相差甚遠;
        考慮同時使用過采樣與欠采樣。
    嘗試產生人工數據樣本
    ??一種簡單的人工樣本數據產生的方法便是,對該類下的所有樣本每個屬性特征的取值空間中隨機選取一個組成新的樣本,即屬性值隨機采樣。你可以使用基于經驗對屬性值進行隨機采樣而構造新的人工樣本,或者使用類似樸素貝葉斯方法假設各屬性之間互相獨立進行采樣,這樣便可得到更多的數據,但是無法保證屬性之前的線性關系(如果本身是存在的)。
    ??有一個系統的構造人工數據樣本的方法SMOTE(Synthetic Minority Over-sampling Technique)。SMOTE是一種過采樣算法,它構造新的小類樣本而不是產生小類中已有的樣本的副本,即該算法構造的數據是新樣本,原數據集中不存在的。該基于距離度量選擇小類別下兩個或者更多的相似樣本,然后選擇其中一個樣本,并隨機選擇一定數量的鄰居樣本對選擇的那個樣本的一個屬性增加噪聲,每次處理一個屬性。這樣就構造了更多的新生數據。具體可以參見原始論文。
    ??這里有SMOTE算法的多個不同語言的實現版本:
        Python: UnbalancedDataset模塊提供了SMOTE算法的多種不同實現版本,以及多種重采樣算法。
        R: DMwR package。
        Weka: SMOTE supervised filter。
    嘗試不同的分類算法
    ??強烈建議不要對待每一個分類都使用自己喜歡而熟悉的分類算法。應該使用不同的算法對其進行比較,因為不同的算法使用于不同的任務與數據。具體可以參見“Why you should be Spot-Checking Algorithms on your Machine Learning Problems”。
    ??決策樹往往在類別不均衡數據上表現不錯。它使用基于類變量的劃分規則去創建分類樹,因此可以強制地將不同類別的樣本分開。目前流行的決策樹算法有:C4.5、C5.0、CART和Random Forest等?;赗編寫的決策樹參見這里?;赑ython的Scikit-learn的CART使用參見這里。
    嘗試對模型進行懲罰
    ??你可以使用相同的分類算法,但是使用一個不同的角度,比如你的分類任務是識別那些小類,那么可以對分類器的小類樣本數據增加權值,降低大類樣本的權值(這種方法其實是產生了新的數據分布,即產生了新的數據集,譯者注),從而使得分類器將重點集中在小類樣本身上。一個具體做法就是,在訓練分類器時,若分類器將小類樣本分錯時額外增加分類器一個小類樣本分錯代價,這個額外的代價可以使得分類器更加“關心”小類樣本。如penalized-SVM和penalized-LDA算法。
    ??Weka中有一個懲罰模型的通用框架CostSensitiveClassifier,它能夠對任何分類器進行封裝,并且使用一個自定義的懲罰矩陣對分錯的樣本進行懲罰。
    ??如果你鎖定一個具體的算法時,并且無法通過使用重采樣來解決不均衡性問題而得到較差的分類結果。這樣你便可以使用懲罰模型來解決不平衡性問題。但是,設置懲罰矩陣是一個復雜的事,因此你需要根據你的任務嘗試不同的懲罰矩陣,并選取一個較好的懲罰矩陣。
    嘗試一個新的角度理解問題
    ??我們可以從不同于分類的角度去解決數據不均衡性問題,我們可以把那些小類的樣本作為異常點(outliers),因此該問題便轉化為異常點檢測(anomaly detection)與變化趨勢檢測問題(change detection)。
    ??異常點檢測即是對那些罕見事件進行識別。如通過機器的部件的振動識別機器故障,又如通過系統調用序列識別惡意程序。這些事件相對于正常情況是很少見的。
    ??變化趨勢檢測類似于異常點檢測,不同在于其通過檢測不尋常的變化趨勢來識別。如通過觀察用戶模式或銀行交易來檢測用戶行為的不尋常改變。
    ??將小類樣本作為異常點這種思維的轉變,可以幫助考慮新的方法去分離或分類樣本。這兩種方法從不同的角度去思考,讓你嘗試新的方法去解決問題。
    嘗試創新
    ??仔細對你的問題進行分析與挖掘,是否可以將你的問題劃分成多個更小的問題,而這些小問題更容易解決。你可以從這篇文章In classification, how do you handle an unbalanced training set?中得到靈感。例如:
        將你的大類壓縮成小類;
        使用One Class分類器(將小類作為異常點);
        使用集成方式,訓練多個分類器,然后聯合這些分類器進行分類;
        ….
??這些想法只是冰山一角,你可以想到更多的有趣的和有創意的想法去解決問題。更多的想法參加Reddit的文章http://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set。
選擇某一種方法并使用它
??你不必成為一個精通所有算法的算法奇才或者一個建立準確而可靠的處理數據不平衡的模型的統計學家,你只需要根據你的問題的實際情況從上述算法或方法中去選擇一種或兩種方法去使用。希望上述的某些方法能夠解決你的問題。例如使用其它評價指標或重采樣算法速度快并且有效。
總結
??記住,其實并不知道哪種方法最適合你的任務與數據,你可以使用一些啟發式規則或經驗去選擇某一個較優算法。當然最好的方法測試每一種算法,然后選擇最好的方法。最重要的是,從點滴開始做起,根據自己現有的知識,并不斷學習去一步步完善。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢