機器學習,數據——數據集不平衡處理


一、概述

1.處理方法總結

(1)不平衡數據集

通常情況下通常情況下把多數類樣本的比例接近100:1這種情況下的數據稱為不平衡數據。不平衡數據的學習即需要在分布不均勻的數據集中學習到有用的信息。

(2)不平衡數據集的處理方法主要分為兩個方面

1、從數據的角度出發,主要方法為采樣,分為欠采樣和過采樣以及對應的一些改進方法。

2、從算法的角度出發,考慮不同誤分類情況代價的差異性對算法進行優化,主要是基於代價敏感學習算法(Cost-Sensitive Learning),代表的算法有adacost;

特殊情況,將不平衡數據集的問題考慮為一分類(One Class Learning)或者異常檢測(Novelty Detection)問題,代表的算法有One-class SVM。

參考:https://www.cnblogs.com/kamekin/p/9824294.html【主要介紹從數據角度出發的不平衡數據集的處理方法以及對應的python庫(imblearn)】

(3)解決方法分多種

1)采樣,對小樣本加噪聲采樣,對大樣本進行下采樣 

2)進行特殊的加權,如在Adaboost中或者SVM中 

3)采用對不平衡數據集不敏感的算法 

4)改變評價標准:用AUC/ROC來進行評價 

5)采用Bagging/Boosting/Ensemble等方法 

6)考慮數據的先驗分布

參考:https://www.zhihu.com/question/40771695

(4)方法總結

參考:

https://blog.csdn.net/zk_ken/article/details/82013965

二、具體方法

1.一分類/異常檢測——極端不平衡

 一分類(One Class Learning)或異常檢測(Novelty Detection)。

對於正負樣本極不平衡的場景,我們可以換一個完全不同的角度來看待問題:把它看做一分類(One Class Learning)或異常檢測(Novelty Detection)問題。這類方法的重點不在於捕捉類間的差別,而是為其中一類進行建模,經典算法One-class SVM。調整SVM以懲罰稀有類別的錯誤分類。

3中,1000:1的比例,算不算極端不平衡?

2.有放回抽取

應該屬於上采樣(過采樣)吧?

讀:《深度學習用於天文圖像空間碎片和恆星分類》

在本文所用的數據集中存在很嚴重的不平衡數據集現象,用於訓練卷積神經網絡的兩類樣本集分別是星象的樣本和空間碎片的樣本的比例大約是 1000:1。為了達到抑制不平衡數據集,本文采用的放回抽取的策略。
首先,兩個樣本池中分別放有所有的樣本,然后從兩個樣本池分別有放回的抽取同樣數量的樣本,最后把所有樣本打亂順序放入訓練集中。 

有放回的抽取不可避免的會造成弱勢數據重復增多,但打亂所有數據順序則可以抑制過擬合問題,目前機器學習大部分訓練采用的也是打亂訓練數據集的策略。

【沒明白作者到底怎么操作?為什么分兩個樣本池?打亂順序有意義嗎?照樣過擬合吧?】

 3.組合/集成方法

集成學習,經典算法XGBoot。

(1)XGBoot原理:

https://www.jianshu.com/p/a62f4dce3ce8

(2)XGBoost如何尋找最優特征?是有放回還是無放回的呢?

XGBoost在訓練的過程中給出各個特征的評分,從而表明每個特征對模型訓練的重要性.。XGBoost利用梯度優化模型算法, 樣本是不放回的(想象一個樣本連續重復抽出,梯度來回踏步會不會高興)。但XGBoost支持子采樣, 也就是每輪計算可以不使用全部樣本。


免責聲明!

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



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