一、概述
在机器学习中,样本不平衡(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)
四、结论
样本不平衡是机器学习中常见的问题,从多个维度理解样本不平衡有助于更好地理解问题。针对样本不平衡问题,采用不同的方法可以改善分类器性能,具体选择哪种方法需要根据实际情况而定。