分类时,由于训练集合中各样本数量不均衡,导致模型训偏在测试集合上的泛化性不好。解决样本不均衡的方法主要包括两类:(1)数据层面,修改各类别的分布;(2)分类器层面,修改训练算法或目标函数进行改进。还有方法是将上述两类进行融合。
数据层面
1. 过采样
(1) 基础版本的过采样:随机过采样训练样本中数量比较少的数据;缺点,容易过拟合;
(2) 改进版本的过采样:SMOTE,通过插值的方式加入近邻的数据点;
(3) 基于聚类的过采样:先对数据进行聚类,然后对聚类后的数据分别进行过采样。这种方法能够降低类间和类内的不平衡。
(4) 神经网络中的过采样:SGD训练时,保证每个batch内部样本均衡。
2. 欠采样
与过采样方法相对立的是欠采样方法,主要是移除数据量较多类别中的部分数据。这个方法的问题在于,丢失数据带来的信息缺失。为克服这一缺点,可以丢掉一些类别边界部分的数据。
分类器层面
1. Thresholding
Thresholding的方法又称为post scaling的方法,即根据测试数据的不同类别样本的分布情况选取合适的阈值判断类别,也可以根据贝叶斯公式重新调整分类器输出概率值。一般的基础做法如下:
假设对于某个类别class在训练数据中占比为x,在测试数据中的占比为x’。分类器输出的概率值需要做scaling,概率转换公式为:
当然这种加权的方式亦可在模型训练过程中进行添加,即对于二分类问题目标函数可以转换为如下公式:
2. Cost sensitive learning
根据样本中不同类别的误分类样本数量,重新定义损失函数。Threshold moving和post scaling是常见的在测试过程进行cost调整的方法。这种方法在训练过程计算损失函数时亦可添加,具体参见上一部分。
另外一种cost sensitive的方法是动态调节学习率,认为容易误分的样本在更新模型参数时的权重更大一些。
3. One-class分类
区别于作类别判决,One-class分类只需要从大量样本中检测出该类别即可,对于每个类别均是一个独立的detect model。这种方法能很好地样本极度不均衡的问题。
4. 集成的方法
主要是使用多种以上的方法。例如SMOTEBoost方法是将Boosting和SMOTE 过采样进行结合。
CNN分类处理方法
CNN神经网络有效地应用于图像分类、文本分类。目前成功解决数据不均衡的问题的一种方法是two-phrase training,即分两阶段训练。首先,在均衡的数据集上进行训练,然后在不均衡的原始数据集合上fine tune最后的output layer。
参考:Buda M, MakiA, Mazurowski M A, et al. A systematic study of the class imbalance problem inconvolutional neural networks[J]. Neural Networks, 2018: 249-259.