数据不均衡是指数据集中每种类别的数据的数量相差比较大。比如一个数据集S中,a类数据有100个,b类有1个,一般相差一个以上数量级的就算是数据不均衡了,需要进行预处理。
数据不均衡会导致最终的分类结果有偏差。同样以数据集S作为说明,如果不作任何处理直接用S作为训练数据,那么用训练模型对一个新的数据进行测试,得到的结果将有约100/(100+1)即近似为1的概率被预测为类别a,而被预测为b类的概率只有1/101,几乎等于0。这样一来,预测的结果总是偏向a类。
下面参考前人的一些介绍和解决方法:
分类问题中,数据不均衡时的解决方法:
https://blog.csdn.net/login_sonata/article/details/54290402
https://blog.csdn.net/yyqq188/article/details/79376804
(数据合成)
机器学习分类器模型评价指标:
https://blog.csdn.net/login_sonata/article/details/54288653
EasyEnsemble:利用模型融合,多次下采样(有放回)得到不同的数据集,训练多个不同的分类器,并将这些分类器组合起来得到最终结果,最终的结果是所有结果的平均值。
BalanceCascade:利用增量训练的思想(Boosting):先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。
(转自: https://blog.csdn.net/pipisorry/article/details/78091626)
(图片来自:https://blog.csdn.net/pipisorry/article/details/78091626)
解决数据不平衡问题的方法有很多,上面只是一些最常用的方法,而最常用的方法也有这么多种,如何根据实际问题选择合适的方法呢?接下来谈谈一些我的经验。
在正负样本都非常之少的情况下,应该采用数据合成的方式;在负样本足够多,正样本非常之少且比例及其悬殊的情况下,应该考虑一分类方法;在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样或者加权的方法。
采样和加权在数学上是等价的,但实际应用中效果却有差别。尤其是采样了诸如Random Forest等分类方法,训练过程会对训练集进行随机采样。在这种情况下,如果计算资源允许上采样往往要比加权好一些。
另外,虽然上采样和下采样都可以使数据集变得平衡,并且在数据足够多的情况下等价,但两者也是有区别的。实际应用中,我的经验是如果计算资源足够且小众类样本足够多的情况下使用上采样,否则使用下采样,因为上采样会增加训练集的大小进而增加训练时间,同时小的训练集非常容易产生过拟合。对于下采样,如果计算资源相对较多且有良好的并行环境,应该选择Ensemble方法。
(转自https://www.cnblogs.com/zhaokui/p/5101301.html)