【機器學習】如何解決數據不平衡問題


  在機器學習的實踐中,我們通常會遇到實際數據中正負樣本比例不平衡的情況,也叫數據傾斜。對於數據傾斜的情況,如果選取的算法不合適,或者評價指標不合適,那么對於實際應用線上時效果往往會不盡人意,所以如何解決數據不平衡問題是實際生產中非常常見且重要的問題。

 


 什么是類別不平衡問題

  我們拿到一份數據時,如果是二分類問題,通常會判斷一下正負樣本的比例,在機器學習中,通常會遇到正負樣本極不均衡的情況,如垃圾郵件的分類等;在目標檢測SSD中,也經常遇到數據不平衡的情況,檢測器需要在每張圖像中評價一萬個到十萬個候選位置,然而其中只有很少的點真的含有目標物體。這就導致了訓練效率低下和簡單的負面樣本引發整個模型表現下降的問題。

 


 如何解決不平衡問題

1. 從數據角度

    • 主動獲取:獲取更多的少量樣本數據

      針對少量樣本數據,可以盡可能去擴大這些少量樣本的數據集,或者盡可能去增加他們特有的特征來豐富數據的多樣性。譬如,如果是一個情感分析項目,在分析數據比例時發現負樣本(消極情感)的樣本數量較少,那么我們可以盡可能在網站中搜集更多的負樣本數量。

    • 算法采樣:上采樣、下采樣、生成合成數據

      • ADASYN采樣方法:

        ADASYN為樣本較少的類生成合成數據,其生成的數據與更容易學習的樣本相比,更難學習。基本思想是根據學習難度的不同,對不同的少數類的樣本使用加權分布。其中,更難學習的少數類的樣本比那些更容易學習的少數類的樣本要產生更多的合成數據。因此,ADASYN方法通過以下兩種方式改善了數據分布的學習:(1)減少由於類別不平衡帶來的偏差;(2)自適應地將分類決策邊界轉移到困難的例子。

      • SMOTE采樣方法:

        從少數類創建新的合成點,以增加其基數。但是SMOTE算法也有一定的局限性。具體有兩項,一是在近鄰選擇時,存在一定的盲目性。在算法執行過程中,需要確定K值,即選擇幾個近鄰樣本,這個需要根據具體的實驗數據和實驗人自己解決。二是該算法無法克服非平衡數據集的數據分布問題,容易產生分布邊緣化的問題。由於負類樣本的分布決定了其可選擇的近鄰,如果一個負類樣本處在負類樣本的邊緣,則由此負類樣本和近鄰樣本產生的樣本也會處在邊緣,從而無法確定正負類的分類邊界。下圖是以前做的一個項目應用個各種采樣方法做數據增強的情況。(效果不明顯,因為原始數據的分布重合太明顯,可視化不容易顯示出效果)

圖1 原始數據的分布

 

圖2 下采樣結果

圖3 上采樣結果

  • 數據增強:加噪音增強模型魯棒性、對不同性質的數據也可以做不同的augmentation

  • 改變權重:設定懲罰因子,如libsvm等算法里設置的正負樣本的權重項等。懲罰多樣本類別,其實還可以加權少樣本類別 

  注意:在選擇采樣法事需要注意一個問題,如果你的實際數據是數據不平衡的,在訓練模型時發現效果不好,於是采取了采樣法平衡的數據的比例再來進行訓練,然后去測試數據上預測,這個時候算法的效果是否會有偏差呢?此時你的訓練樣本的分布與測試樣本的分布已經發生了改變,這樣做反而會產生不好的效果。在實際情況中,我們盡可能的需要保持訓練和測試的樣本的概率分布是一致的,如果測試樣本的分布是不平衡的,那么訓練樣本盡可能與測試樣本的分布保持一致,哪怕拿到手的是已經清洗和做過預處理后的平衡的數據。具體原因感興趣的可以仔細思考一下。

2.從評價指標角度

  • 謹慎選擇AUC作為評價指標:對於數據極端不平衡時,可以觀察觀察不同算法在同一份數據下的訓練結果的precision和recall,這樣做有兩個好處,一是可以了解不同算法對於數據的敏感程度,二是可以明確采取哪種評價指標更合適。針對機器學習中的數據不平衡問題,建議更多PR(Precision-Recall曲線),而非ROC曲線,具體原因畫圖即可得知,如果采用ROC曲線來作為評價指標,很容易因為AUC值高而忽略實際對少兩樣本的效果其實並不理想的情況。

  • 不要只看Accuracy:Accuracy可以說是最模糊的一個指標了,因為這個指標高可能壓根就不能代表業務的效果好,在實際生產中,我們可能更關注precision/recall/mAP等具體的指標,具體側重那個指標,得結合實際情況看。

3.從算法角度

  • 選擇對數據傾斜相對不敏感的算法。如樹模型等。

  • 集成學習(Ensemble集成算法)。首先從多數類中獨立隨機抽取出若干子集,將每個子集與少數類數據聯合起來訓練生成多個基分類器,再加權組成新的分類器,如加法模型、Adaboost、隨機森林等。

  • 將任務轉換成異常檢測問題。譬如有這樣一個項目,需要從高壓線的航拍圖片中,將松動的螺絲/零件判斷為待檢測站點,即負樣本,其他作為正樣本,這樣來看,數據傾斜是非常嚴重的,而且在圖像質量一般的情況下小物體檢測的難度較大,所以不如將其轉換為無監督的異常檢測算法,不用過多的去考慮將數據轉換為平衡問題來解決。

 


 目標檢測中的不平衡問題的進展

1.GHM_Detection

論文:https://arvix.org/pdf/1811.05181.pdf
github:https://github.com/libuyu/GHM_Detection

本文是香港中文大學發表於 AAAI 2019 的工作,文章從梯度的角度解決樣本中常見的正負樣本不均衡的問題。從梯度的角度給計算 loss 的樣本加權,相比與 OHEM 的硬截斷,這種思路和 Focal Loss 一樣屬於軟截斷。

文章設計的思路不僅可以用於分類 loss 改進,對回歸 loss 也很容易進行嵌入。不需要考慮 Focal Loss 的超參設計問題,同時文章提出的方法效果比 Focal Loss 更好。創新點相當於 FL 的下一步方案,給出了解決 class-imbalance 的另一種思路,開了一條路,估計下一步會有很多這方面的 paper 出現。

2.Focal Loss for Dense Object Detection

論文:

Focal Loss:https://arxiv.org/abs/1708.02002

RetinaNet:https://github.com/unsky/RetinaNet

github:https://github.com/unsky/focal-loss

本文通過重塑標准交叉熵損失來解決這一類不平衡問題。他們的想法是降低簡單的負面樣本所占的權重,所以他們提出的焦點損失(Focal Loss)方法將訓練集中在一系列難點上,並且防止了大量的簡單負面例子在訓練過程中阻礙探測器學習。如上圖,參數 γ 的值選擇得越大,模型就會對已經得到了很好的分類的樣本忽略得越多,越專注於難的樣本的學習。這樣的機制就讓他們的檢測器在密集對象檢測這樣的真實正面樣本比例很低的情況下取得了很高的准確率。對於應對樣本不平衡問題的關鍵方法“焦距損失”,作者們在論文中還提出了兩種不同的表現形式,都起到了很好的效果.

3.在線困難樣例挖掘(online hard example mining, OHEM)

目標檢測的另一個問題是類別不平衡,圖像中大部分的區域是不包含目標的,而只有小部分區域包含目標。此外,不同目標的檢測難度也有很大差異,絕大部分的目標很容易被檢測到,而有一小部分目標卻十分困難。OHEM和Boosting的思路類似,其根據損失值將所有候選區域進行排序,並選擇損失值最高的一部分候選區域進行優化,使網絡更關注於圖像中更困難的目標。此外,為了避免選到相互重疊很大的候選區域,OHEM對候選區域根據損失值進行NMS。

 

    總之,針對數據不平衡問題,有多重解決方式,但是不能為了解決這個問題就去改變數據的真實分布來得到更好的結果,可以從算法、loss function的設計等等多種角度來選擇解決數據不平衡的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM