search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

如何解決機器學習中的數據不平衡問題?

AI研習社按:本文作者章華燕,金橋智慧科技演算法工程師,原文載於作者個人博客,AI研習社已獲授權。

在機器學習任務中,我們經常會遇到這種困擾:數據不平衡問題

數據不平衡問題主要存在於有監督機器學習任務中。當遇到不平衡數據時,以總體分類準確率為學習目標的傳統分類演算法會過多地關注多數類,從而使得少數類樣本的分類性能下降。絕大多數常見的機器學習演算法對於不平衡數據集都不能很好地工作。

本文介紹幾種有效的解決數據不平衡情況下有效訓練有監督演算法的思路:

1、重新採樣訓練集

可以使用不同的數據集。有兩種方法使不平衡的數據集來建立一個平衡的數據集——欠採樣和過採樣。

1.1. 欠採樣

欠採樣是通過減少豐富類的大小來平衡數據集,當數據量足夠時就該使用此方法。通過保存所有稀有類樣本,並在豐富類別中隨機選擇與稀有類別樣本相等數量的樣本,可以檢索平衡的新數據集以進一步建模。

1.2. 過採樣

相反,當數據量不足時就應該使用過採樣,它嘗試通過增加稀有樣本的數量來平衡數據集,而不是去除豐富類別的樣本的數量。通過使用重複、自舉或合成少數類過採樣等方法(SMOTE)來生成新的稀有樣品。

注意到欠採樣和過採樣這兩種方法相比而言,都沒有絕對的優勢。這兩種方法的應用取決於它適用的用例和數據集本身。另外將過採樣和欠採樣結合起來使用也是成功的。

2、使用 K-fold 交叉驗證

值得注意的是,使用過採樣方法來解決不平衡問題時應適當地應用交叉驗證。這是因為過採樣會觀察到罕見的樣本,並根據分佈函數應用自舉生成新的隨機數據,如果在過採樣之後應用交叉驗證,那麼我們所做的就是將我們的模型過擬合於一個特定的人工引導結果。這就是為什麼在過度採樣數據之前應該始終進行交叉驗證,就像實現特徵選擇一樣。只有重複採樣數據可以將隨機性引入到數據集中,以確保不會出現過擬合問題。

K-fold 交叉驗證就是把原始數據隨機分成 K 個部分,在這 K 個部分中選擇一個作為測試數據,剩餘的 K-1 個作為訓練數據。交叉驗證的過程實際上是將實驗重複做 K 次,每次實驗都從 K 個部分中選擇一個不同的部分作為測試數據,剩餘的數據作為訓練數據進行實驗,最後把得到的 K 個實驗結果平均。

3、轉化為一分類問題

對於二分類問題,如果正負樣本分佈比例極不平衡,我們可以換一個完全不同的角度來看待問題:把它看做一分類(One Class Learning)或異常檢測(Novelty Detection)問題。這類方法的重點不在於捕捉類間的差別,而是為其中一類進行建模,經典的工作包括 One-class SVM 等,如下圖所示:

One Class SVM 是指你的訓練數據只有一類正(或者負)樣本的數據, 而沒有另外的一類。在這時,你需要學習的實際上你訓練數據的邊界。而這時不能使用最大化軟邊緣了,因為你沒有兩類的數據。 所以呢,在這邊文章中,「Estimating the support of a high-dimensional distribution」, Sch?lkopf 假設最好的邊緣要遠離特徵空間中的原點。左邊是在原始空間中的邊界,可以看到有很多的邊界都符合要求,但是比較靠譜的是找一個比較緊的邊界(紅色的)。這個目標轉換到特徵空間就是找一個離原點比較遠的邊界,同樣是紅色的直線。當然這些約束條件都是人為加上去的,你可以按照你自己的需要採取相應的約束條件。比如讓你 data 的中心離原點最遠。

說明:對於正負樣本極不均勻的問題,使用異常檢測,或者一分類問題,也是一個思路。

4、組合不同的重採樣數據集

成功泛化模型的最簡單方法是使用更多的數據,問題是像邏輯回歸或隨機森林這樣開箱即用的分類器,傾向於通過捨去稀有類來泛化模型。一個簡單的最佳實踐是建立 n 個模型,每個模型使用稀有類別的所有樣本和豐富類別的 n 個不同樣本。假設想要合併 10 個模型,那麼將保留例如 1000 例稀有類別,並隨機抽取 10000 例豐富類別。然後,只需將 10000 個案例分成 10 塊,並訓練 10 個不同的模型。

如果擁有大量數據,這種方法是簡單並且是可橫向擴展的,這是因為可以在不同的集群節點上訓練和運行模型。集合模型也趨於泛化,這使得該方法易於處理。

5、用不同比例重新採樣

方法 4 可以很好地將稀有類別和豐富類別之間的比例進行微調,最好的比例在很大程度上取決於所使用的數據和模型。但是,不是在整體中以相同的比例訓練所有模型,所以值得嘗試合併不同的比例。如果 10 個模型被訓練,有一個模型比例為 1:1(稀有:豐富)和另一個 1:3 甚至是 2:1 的模型都是有意義的。一個類別獲得的權重依賴於使用的模型。

6、多模型 Bagging

方法 5 雖然能夠選出最好的樣本數據比例。但是它的魯棒性不能夠保證:它的魯棒性取決於測試集樣本的選取

為了解決上述方法的缺陷,增加模型魯棒性。為此,我本人在 隨機森林演算法 思想的啟發下,想出了在上述方法的基礎上,將不同比例下訓練出來的模型進行 多模型 Bagging 操作,具體的步驟如下:

1. 對兩類樣本選取 N 組不同比例的數據進行訓練並測試,得出模型預測的準確率:

P={ P| i=1,2,...N }

2. 對上述各模型的準確率進行歸一化處理,得到新的權重分佈:

Ω={ ω

其中:

3. 按權重分佈 Ω 組合多個模型,作為最終的訓練器:

● 對於分類任務:

● 對於回歸任務:

7、集群豐富類

Sergey Quora 提出了一種優雅的方法,他建議不要依賴隨機樣本來覆蓋訓練樣本的種類,而是將 r 個群體中豐富類別進行聚類,其中 r 為 r 中的例數。每個組只保留集群中心(medoid)。然後,基於稀有類和僅保留的類別對該模型進行訓練。

7.1. 對豐富類進行聚類操作

首先,我們可以對具有大量樣本的豐富類進行聚類操作。假設我們使用的方法是 K-Means 聚類演算法 。此時,我們可以選擇 K 值為稀有類中的數據樣本的個數,並將聚類后的中心點以及相應的聚類中心當做富類樣本的代表樣例,類標與富類類標一致。

7.2. 聚類后的樣本進行有監督學習

經過上述步驟的聚類操作,我們對富類訓練樣本進行了篩選,接下來我們就可以將相等樣本數的 K 個正負樣本進行有監督訓練。如下圖所示:

8、設計適用於不平衡數據集的模型

所有之前的方法都集中在數據上,並將模型保持為固定的組件。但事實上,如果設計的模型適用於不平衡數據,則不需要重新採樣數據,著名的 XGBoost 已經是一個很好的起點,因此設計一個適用於不平衡數據集的模型也是很有意義的。

通過設計一個代價函數來懲罰稀有類別的錯誤分類而不是分類豐富類別,可以設計出許多自然泛化為稀有類別的模型。例如,調整 SVM 以懲罰稀有類別的錯誤分類。

關注 AI 研習社后,回復【1】獲取

【千 G 神經網路 / AI / 大數據、教程、論文!】

百度雲盤地址!

英偉達 DLI 高級工程師現場指導,理論結合實踐,一舉入門深度學習!

課程鏈接:mooc.ai(點擊閱讀原文抵達)



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦