类别不平衡是什么?某一类样本远少于其他类
类别不平衡(Class-imbalance)是指在分类任务中,不同类别的训练样本数量相差很大的情况。它在现实中非常普遍:信用卡交易中欺诈只占千分之一甚至更少,医学筛查中患病者往往是少数,工业质检中次品远少于合格品,网络流量中攻击行为只是极小的一部分。
为什么它是个问题
大多数学习算法默认各类样本数量相当,以总体错误率最低为目标。当多数类占 99% 时,模型只要把所有样本都预测为多数类,就能得到 99% 的准确率,却一个少数类样本也识别不出来,而少数类往往恰恰是我们最关心的。少数类样本太少,模型也很难学到它们的规律。
评估时要换指标
在类别不平衡的情况下,准确率和错误率都会产生误导。应当关注少数类的查全率(找出了多少)、查准率(判对了多少)、二者的调和平均 F1 分数,以及精确率-召回率曲线和它下面的面积。ROC 曲线在极度不平衡时可能显得过于乐观,PR 曲线往往更能反映真实情况。混淆矩阵能直观显示每一类的错误。
常见的应对方法
再缩放(阈值移动):模型输出概率后,不用 0.5 作为阈值,而是根据两类样本的比例或误判代价调整阈值。周志华《机器学习》把它作为类别不平衡学习的基本策略:如果正负样本比例为 1 比 9,那么预测概率超过 0.1 就可以考虑判为正类。过采样:增加少数类样本,比如复制或用 SMOTE 在少数类样本之间插值合成新样本。欠采样:减少多数类样本,比如随机删除,或用 EasyEnsemble 等方法把多数类分成多份分别与少数类组合训练、再集成,避免丢失信息。类别加权:在损失函数中给少数类样本更大的权重,很多算法库都提供这一选项。改进的损失函数:比如目标检测中提出的 Focal Loss,降低大量容易分对的样本的权重,让模型更关注难分的样本。异常检测视角:当少数类极少时,也可以只学习多数类的正常模式,把偏离它的样本视为异常。
注意事项
任何重采样都只能在训练集上进行,测试集要保持真实分布;划分数据时应使用分层抽样,保证各子集中少数类的比例一致。此外,类别不平衡往往伴随着不同错误代价不相等,最好结合业务明确代价,再选择阈值和方法。