1. 什么是数据不平衡
数据不平衡是指数据样本的分布偏向某一侧,使得一侧的数据样本数很多而另一侧数据样本数很少,形成一种不平衡。数据不平衡会导致学习出来的模型不能很好地掌握少数数据样本的规律,受到多数数据样本的“污染”。举个最简单的例子,一个二分类问题,98%的样本是一种标签而剩余2%是另一种标签,这时候分类模型只需要全部输出一种标签就可以有98%的正确率了。
2. 数据不平衡处理方法
扩充数据集
扩充数据集就是收集更多的数据,在收集更多的数据的过程中,如果真实的数据分布并不存在不平衡的问题,在期望上最终采集出来的数据集也会接近真实分布,从而解决数据不平衡的问题。
上采样和下采样
上采样就是重复将少数样本添加进数据集,可以适当添加噪声。而下采样就是从多数样本中采样,减少多数样本与少数样本之间的不平衡。上采样因为只是简单重复少数样本,实际作用和增大少数样本在目标函数的权重相当。下采样又会缺失一些已有信息,无法完全利用所有数据。无论是上采样还是下采样都有可能会改变数据分布,从而对模型的学习过程与预测效果造成影响。
人造数据
人造数据就是利用现有数据,分析其规律,利用规律去制造新的数据。一般而言,我们会认为数据的分布满足邻近性,即相邻的样本是同类的可能性会更大。SMOTE算法就是基于这个原理,这个算法首先会选择一个少数类样本,然后求出该样本的少数类$k$近邻,接着从这$k$近邻中随机选出一个少数类样本,然后在这两个样本的线段中随机产生一个新的少数类样本。这个方法存在一个问题就是会模糊少数类和多数类的边界,为了解决这个问题,几个改进版的SMOTE算法又被提了出来,比如有Borderline-SMOTE算法。
模型
一些模型是可以天然克服数据不平衡问题的,比如SVM和决策树。
可以在目标函数的计算中,提高少数类样本的权重,从而重视模型对少数类样本的学习,削弱多数类对模型的“污染”。
还可以将分类问题看作是异常检测问题,将少数类当作异常点,套用异常检测模型。异常检测模型常见的有oneClassSvm,孤立森林。
还可以使用聚类算法处理数据,比如使用DBSCAN算法。多数类样本一般处于高密度空间而少数类样本处于低密度空间,利用这一特性可以区分出多数类样本的一些特性,然后不符合多数类特性的就当作少数类。
还有一种boosting算法,训练三个基分类器。首先使用全部样本训练分类器L1,然后使用相同数目的L1分对的样本和分错的样本训练分类器L2,最后使用L1和L2分类结果不一致的样本训练分类器L3。结合三个分类器投票决定样本的分类结果,只有当L2和L3都认为是少数类,才认为输入样本是少数类,否则就是多数类。
还有一种方法将多数类划分为L个子集,每个子集的大小和少数类数目相当,然后训练L个模型。在预测时,综合这L个模型的输出结果作为预测结果。
评价指标
使用精确率和召回率综合评价,可以使用F1值,也可以使用PR曲线,ROC曲线和正确率则不适合用于数据不平衡的任务。