在机器学习分类任务中,类别不平衡是指不同类别的训练样例数差别很大。
介绍在现实的分类任务中,我们会经常遇到类别不平衡的问题。例如,在银行信用欺诈交易识别中,属于欺诈交易的应该是很少部分,绝大部分交易是正常的,这就是一个正常的类别不平衡问题。一般而已,如果类别不平衡比例超过4:1,那么其分类器会大大地因为数据不平衡性而无法满足分类要求的。因此在构建分类模型之前,需要对分类不平衡性问题进行处理。
我们假设有这种情况,训练数据有反例998个,正例2个,模型是一个永远将新样本预测为反例的学习器,就能达到99.8%的精度,这样显然是不合理的。
解决方法1、扩大数据集当遇到类别不均衡问题时,首先应该想到,是否可能再增加数据(一定要有小类样本数据),更多的数据往往战胜更好的算法。因为机器学习是使用现有的数据对整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息。即使再增加小类样本数据时,又增加了大类样本数据,也可以使用放弃一部分大类数据(即对大类数据进行欠采样)来解决。
2、欠采样欠采样(under-sampling):对大类的数据样本进行采样来减少该类数据样本的个数,使其与其他类数目接近,然后再进行学习。欠采样若随机丢弃大类样本,可能会丢失一些重要信息。
欠采样的代表算法是EasyEnsemble:利用集成学习机制,将大类划分为若干个集合供不同的学习器使用。这样对每个学习器来看都进行了欠采样,但在全局来看却不会丢失重要信息1。
3、过采样过采样(over-sampling ):对小类的数据样本进行采样来增加小类的数据样本个数。 过采样的代表算法是SMOTE(原始论文)和ADASYN原始论文。
总结:采样算法容易实现,运行速度快,且效果也不错。
在欠采样、过采样中的小经验:
1、考虑对大类下的样本(超过1万、十万甚至更多)进行欠采样,即删除部分样本;
2、 考虑对小类下的样本(不足1为甚至更少)进行过采样,即添加部分样本的副本;
3、考虑尝试随机采样与非随机采样两种采样方法;
4、 考虑对各类别尝试不同的采样比例,不一定是1:1,有时候1:1反而不好,因为与现实情况相差甚远;
5、考虑同时使用过采样与欠采样,对二者进行结合;
值得注意的是,使用过采样方法来解决不平衡问题时应适当地应用交叉验证。这是因为过采样会观察到罕见的样本,并根据分布函数应用自举生成新的随机数据,如果在过采样之后应用交叉验证,那么我们所做的就是将我们的模型过拟合于一个特定的人工引导结果。这就是为什么在过度采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有重复采样数据可以将随机性引入到数据集中,以确保不会出现过拟合问题。
4、使用新评价指标在一开始的例子中可以看出,准确度这个评价指标在类别不均衡的分类任务中并不适用,甚至进行误导。因此在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。
- 混淆矩阵(Confusion Matrix):使用一个表格对分类器所预测的类别与其真实的类别的样本统计,分别为:TP、FN、FP与TN。由此计算精确率(precision)、召回率(recall)、F1值(F1 value)。
- ROC曲线(ROC Curves)
- AUC
- Kappa (Cohen kappa)
5、尝试不同的分类算法因为不同的算法适用于不同的任务与数据,应该使用不同的算法进行比较。决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。流行的决策树算法有:C4.5、C5.0、CART和Random Forest等。
本词条内容贡献者为:
王慧维 - 副研究员 - 西南大学