数据不平衡经常出现在分类问题上,数据不平衡指的是在数据集中不同类别的样本数量差距很大,比如,在病人是否得癌症的数据集上,可能绝大部分的样本类别都是健康的,只有极少部分样本类别是患病的。下面介绍几个常用的处理数据不平衡的方法:
1、上采样
SMOTE算法是一种简单有效的上采样方法,该方法类似KNN算法,首先给类别数量少的样本随机选择出几个近邻样本,并且在该样本与这些近邻样本的连线上随机采样,生成无重复的新的样本。
2、下采样
下采样是通过丢弃部分大类样本的方法,使得数据达到平衡状态。
3、分类器评估指标
在数据平衡的分类问题中,分类器好坏的评估指标常用准确率,但是对于数据不平衡的分类问题,准确率不再是恰当的评估指标。所以针对不平衡数据分类问题,常用f1-score、ROC-AUC曲线。
4、G-Mean
先计算特异度(specificity),再计算G-Mean
5、惩罚算法
使用惩罚学习算法,提高少数类的分类错误的成本,在训练期间使用参数class_weight='balanced’来惩罚少数群体类的错误,其数量与其代表性不足的数量成正比。
可以对分类器的小类样本数据增加权值,降低大类样本的权值(这种方法其实是产生了新的数据分布,即产生了新的数据集,译者注),从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。如penalized-SVM和penalized-LDA算法。
Weka中有一个惩罚模型的通用框架CostSensitiveClassifier,它能够对任何分类器进行封装,并且使用一个自定义的惩罚矩阵对分错的样本进行惩罚。
如果你锁定一个具体的算法时,并且无法通过使用重采样来解决不均衡性问题而得到较差的分类结果。这样你便可以使用惩罚模型来解决不平衡性问题。但是,设置惩罚矩阵是一个复杂的事,因此你需要根据你的任务尝试不同的惩罚矩阵,并选取一个较好的惩罚矩阵。
6、使用基于树的算法
基于树的算法在数据不平衡数据集上表现良好,因为它们的层次结构允许它们从两个类中学习信号。