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

  在機器學習的實踐中,咱們一般會遇到實際數據中正負樣本比例不平衡的狀況,也叫數據傾斜。對於數據傾斜的狀況,若是選取的算法不合適,或者評價指標不合適,那麼對於實際應用線上時效果每每會不盡人意,因此如何解決數據不平衡問題是實際生產中很是常見且重要的問題。git

 


 什麼是類別不平衡問題

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

 


 如何解決不平衡問題

1. 從數據角度

    • 主動獲取:獲取更多的少許樣本數據算法

      針對少許樣本數據,能夠儘量去擴大這些少許樣本的數據集,或者儘量去增長他們特有的特徵來豐富數據的多樣性。譬如,若是是一個情感分析項目,在分析數據比例時發現負樣本(消極情感)的樣本數量較少,那麼咱們能夠儘量在網站中搜集更多的負樣本數量。網絡

    • 算法採樣:上採樣、下采樣、生成合成數據機器學習

      • ADASYN採樣方法:學習

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

      • SMOTE採樣方法:優化

        從少數類建立新的合成點,以增長其基數。可是SMOTE算法也有必定的侷限性。具體有兩項,一是在近鄰選擇時,存在必定的盲目性。在算法執行過程當中,須要肯定K值,即選擇幾個近鄰樣本,這個須要根據具體的實驗數據和實驗人本身解決。二是該算法沒法克服非平衡數據集的數據分佈問題,容易產生分佈邊緣化的問題。因爲負類樣本的分佈決定了其可選擇的近鄰,若是一個負類樣本處在負類樣本的邊緣,則由此負類樣本和近鄰樣本產生的樣本也會處在邊緣,從而沒法肯定正負類的分類邊界。下圖是之前作的一個項目應用個各類採樣方法作數據加強的狀況。(效果不明顯,由於原始數據的分佈重合太明顯,可視化不容易顯示出效果)網站

圖1 原始數據的分佈spa

 

圖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的設計等等多種角度來選擇解決數據不平衡的方法。

相關文章
相關標籤/搜索