一、概述
在機器學習中,樣本不平衡(imbalance)是指不同類別的樣本數量差距懸殊的情況,這種情況在很多實際任務中很常見。如垃圾郵件分類中,正樣本(垃圾郵件)通常只佔總樣本數量的1%~2%。樣本不平衡會對分類器性能造成不利影響,需要採取一些策略來解決這個問題。
二、度量標準
衡量樣本不平衡的方法很多,下面介紹常用的度量標準:
(1)精度(Accuracy):分類正確的樣本數佔總樣本數的比例,當正負樣本不平衡時,精度的值會受到負樣本的影響。
(2)召回率(Recall):正樣本中被預測為正樣本的比例,也稱TPR(True Positive Rate)。
(3)精確率(Precision):被預測為正樣本中真正為正樣本的比例。
(4)F1值:Precision和Recall的加權平均值,表徵模型整體性能。常用的權重為1:1。
(5)ROC曲線(Receiver Operating Characteristic Curve):根據不同的分類閾值,以TPR為縱坐標,FPR(False Positive Rate)為橫坐標畫出的曲線,AUC(Area Under Curve)值越大,則模型效果越好。
三、方法
(一)過採樣
過採樣是通過複製或合成正樣本來平衡數據集的方法。如SMOTE算法(Synthetic Minority Over-sampling Technique,合成少數類過採樣技術)在將多數類樣本複製後,在正樣本的各個維度上隨機插值產生新的合成樣本,從而解決了多數類樣本過度集中導致分類器偏向多數類的問題。
from imblearn.over_sampling import SMOTE
X_resampled, y_resampled = SMOTE().fit_resample(X, y)
(二)欠採樣
欠採樣是通過刪除一部分多數類樣本來平衡數據集的方法。如Random Undersampling隨機刪除多數類的一些樣本,保證多數類樣本的數量和少數類樣本相當。
from imblearn.under_sampling import RandomUnderSampler
X_resampled, y_resampled = RandomUnderSampler().fit_resample(X, y)
(三)集成學習
集成學習是通過構造多個分類器,再通過一定的規則將它們組合起來,提高分類器性能的方法。如Bagging、Boosting、Stacking等方法。
from sklearn.ensemble import RandomForestClassifier
from imblearn.ensemble import BalancedRandomForestClassifier
rf = RandomForestClassifier()
brf = BalancedRandomForestClassifier()
brf.fit(X_train, y_train)
y_pred = brf.predict(X_test)
四、結論
樣本不平衡是機器學習中常見的問題,從多個維度理解樣本不平衡有助於更好地理解問題。針對樣本不平衡問題,採用不同的方法可以改善分類器性能,具體選擇哪種方法需要根據實際情況而定。
原創文章,作者:GFHIM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/369989.html