类别不平衡怎么办:重采样、加权与集成

数据类别不平衡是实际应用里很常见的一类问题——现实场景的数据不会像公开数据集那样高质量,很可能正负样本数量极度悬殊。处理类别不平衡主要有三类方法:重采样(Resampling)权重平衡(Weight balancing)集成(Ensembles)

重采样

重采样有两种方向:对样本多的类别欠采样(undersampling),或对样本少的类别过采样(oversampling)

对数据进行重采样
欠采样(左)删掉多数类样本,过采样(右)增补少数类样本。

欠采样的一个经典算法是 Tomek Links:在多数类里找到那些与少数类样本最接近的样本,把它们移除,从而让决策边界更清晰。但这招不一定有效——它也可能抹掉一些细微的决策边界,适得其反。

利用 Tomek Links 进行欠采样
Tomek Links:移除多数类中紧贴少数类的样本,让边界更干净。

过采样的一个经典算法是 SMOTE:先算少数类中某个样本 xix_i 的 K 近邻,从这 K 个近邻里随机选一个 x^i\hat{x}_i,再在 xix_ix^i\hat{x}_i 的连线上随机生成新样本;不断循环直到生成足够数量的新样本。

利用 SMOTE 进行过采样
SMOTE:在少数类样本与其近邻的连线上合成新样本。

权重平衡

另一类方法是给不同类别的样本赋予不同权重,代表作是 Focal Loss:

FL(pt)=αt(1pt)γlog(pt)\text{FL}(p_t) = -\alpha_t\,(1-p_t)^{\gamma}\log(p_t)

其中 α\alpha 负责正负样本不均衡——给正负样本的损失赋不同权重;γ\gamma 负责难易样本不均衡——γ\gamma 调得越大,置信度高的”简单样本”损失越小,损失函数就会更聚焦于难分的”复杂样本”。

Focal Loss 让损失更关注复杂样本
γ 越大,简单样本(高置信度)的损失被压得越低,损失更聚焦于难样本。

集成

还有一类是集成学习(Ensemble)。常见的 Bagging(bootstrap aggregating)采样出不同的数据子集训练多个分类器,再对结果投票,取得票最高的作为最终结果——多个弱分类器的组合往往比单个更稳健。

Bagging 算法
Bagging:在不同数据子集上训练多个分类器,再投票汇总。

参考资料

  • He, Haibo, Ma, Yunqian. Imbalanced Learning: Foundations, Algorithms, and Applications. Wiley, 2013.
  • Chawla, Nitesh V., et al. SMOTE: Synthetic Minority Over-sampling Technique. JAIR, 2002.
  • Lin, Tsung-Yi, et al. Focal Loss for Dense Object Detection. ICCV, 2017.