在學習機器學習的時候,我們遇到的數據集大多是類別平衡的,即數據集中各個類的樣本數都
很接近。但是實際問題中我們遇到的大部分數據集都是不均衡的。常用的處理方法如下:
- 對數據進行預處理,進行欠採樣或者過採樣等處理,使數據分佈較為均衡。
- 對算法進行改進,使其對少數類更加敏感。
python提供了就是一個處理不均衡數據的imblearn庫;其基於機器學習常用sklearn開發而
成,使用方法和sklearn庫十分相似,上手非常容易。imblearn庫對不平衡數據的主要處理方法主
要分為如下四種:
- 欠採樣
- 過採樣
- 聯合採樣
- 集成採樣
包含了各種常用的不平衡數據處理方法,例如:隨機過採樣,SMOTE及其變形方法,tom-
links欠採樣,編輯最近鄰欠採樣方法等等。
使用方法也很簡單,下述代碼就是使用隨機欠採樣方法平衡數據集,其他方法也類似。
<code>from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_resample(X, y)
print(sorted(Counter(y_resampled).items()))
# [(0, 64), (1, 64), (2, 64)]/<code>
上圖右一為原始數據集,右三為使用隨機欠採樣方法處理得到的數據集。
imblearn也提供了用戶手冊:3. Under-sampling。可以方便的查看其中內置的各種函數的
使用方法及其原理,同時每種算法的說明下面還提供了對應的論文地址。不過現在還沒有漢化
的用戶手冊。
最後安裝imblearn庫的方法也很簡單
<code>pip3 install imbalanced-learn/<code>
成功之後就能在python中導入imblearn包。
imblearn的源代碼地址如下,想深入研究的同學門可以clone下來自己深入研究:
https://github.com/scikit-learn-contrib/imbalanced-learngithub.com
閱讀更多 超愛學習 的文章