數據不平衡如何處理


數據不平衡

1.什么是數據不平衡

一般都是假設數據分布是均勻的,每種樣本的個數差不多,但是現實情況下我們取到的數據並不是這樣的,如果直接將分布不均的數據直接應用於算法,大多情況下都無法取得理想的結果。

這里着重考慮二分類,因為解決了二分類種的數據不平衡問題后,推而廣之酒能得到多分類情況下的解決方案。

經驗表明,訓練數據中每個類別有5000個以上樣本,其實也要相對於特征而言,來判斷樣本數目是不是足夠,數據量是足夠的,正負樣本差一個數量級以內是可以接受的,不太需要考慮數據不平衡問題(完全是經驗,沒有理論依據,僅供參考)。

2.如何解決數據不平衡

我們將樣本較多的類別記為“大眾類”,樣本較少的稱為“小眾類”。

下面是解決數據不平衡的方法

2.1 采樣

通過隨機樣本抽取使得數據平衡,采樣分為上采樣和下采樣,上采樣就是將小眾類復制多份,下采樣就是從大眾類種隨機抽取樣本與小種類一起作為訓練集放進模型中。

優點:簡單

缺點:上采樣后數據集出現重復樣本會導致一定的過擬合,下采樣導致數據集丟失,模型只學會了總體模式的一部分。

那么怎么克服采樣的缺點呢?看下面的方法:

(1) EasyEnsemble ,也就是集成,多次下采樣,多次從大眾類中抽取樣本然后和小眾類作為一個訓練集放進模型,最后將多個模型輸出結果進行組合得到最終結果。(使用了bagging的思想)

(2) BalanceCascade , 先通過一次下采樣產生訓練集,訓練一個分類器,然后對於分類正確的大眾類樣本不放回,然后對這個更小的大眾樣本進行下采樣,訓練第二個訓練器,......, 最終組合所有分類器的結果得到最終結果。(使用了boosting的思想)

2.2 數據合成(SMOTE)

所謂數據合成方法,就是利用已有樣本生成更多樣本。在醫學圖像分析中有顯著效果。

它利用小眾樣本在特征空間的相似性來生成新樣本。對於小眾樣本\(x_i\in S_{min}\),從它屬於小眾類的K近鄰中隨機選取一個樣本點\(\hat{x}_i\),生成一個新的小眾樣本:

\(x_{new}=x_i + (\hat{x}_i-x_i)\times\delta\),\(\delta\in [0,1]\)是隨機數。

以K=6,生成一個新的小眾類:

缺點:增加了類之間重疊的可能性,另一方面生成了一些沒有提供有益信息的樣本。

為了克服SMOTE的缺點,有下面的兩種方法:

(1):Borderline-SMOTE,這里的尋找小眾類的k緊鄰時不局限於在小種類中尋找,而是在所有的樣本集中尋找小眾類的k緊鄰,為k緊鄰中有一半以上大眾樣本的小眾樣本生成新樣本。 也就是說,只為哪些周圍大部分是大眾樣本的小眾樣本生成新樣本。因為這些樣本往往是邊界樣本。

確定了為哪些小眾樣本生成新樣本后,再利用SMOTE生成新樣本。

(2):ADASYN,為不同小眾樣本生成不同數量的新樣本

​ ①根據最終的平衡程度設定總共需要生成的新小眾樣本數量G

​ ②為每個小眾樣本\(x_i\)計算分布比例\(\Gamma_i\)

​ ③最后為小眾樣本\(x_i\)生成新樣本的個數為\(g_i = \Gamma_i \times G\),確定個數后再利用SMOTE生成新樣本

參考:https://blog.csdn.net/u012879957/article/details/82459538


免責聲明!

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



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