您的位置:首页 > 大数据

数据不平衡问题的处理

2016-05-09 00:36 246 查看

引言

在分类问题中正负样本比例不平衡是很常见的问题,例如在预测CVR的时候,会有大量的负例,但是正例的数目缺不多,正负样本比例严重失衡。这是一个值得思考的问题。

解决思路

首先我们需要思考的是我们可否通过扩大数据集,得到更多的比例较小的样本,使新的训练集样本分布较为均衡,如果可行的话,那么这种方法值得我们考虑。

若不可行的话,可以试着从如下两个角度出发考虑:

数据的角度

算法/模型的角度

数据的角度

故名思议,从数据的角度出发就是,想办法使得数据的比例较为均衡,可以做的是对数据进行采样。

欠采样

过采样

欠采样和过采样都是随机采样,欠采样选择少量的多数类样本与少数类样本构成新的训练样本,但是若少数类样本确实太少的话,不建议使用这种方法,虽然使得样本整体的比较均衡,但是会由于样本数太少会导数信息缺失,让某些特征的不能很好的表现出来,使得欠拟合。过采样相反,是在少数类样本中做随机采样,扩大少类样本的数量,但是由于数据量的提升使得训练过程的计算量增加,也可能导致过拟合问题。

EasyEnsemble算法

考虑到欠采样可能导致信息缺失的缺点,我们提出了一种集成学习的方法–EasyEnsemble算法

算法原理:

从多数类中有放回的随机采样n次,每次选取与少数类数目近似的样本,那么可以得到n个样本集合记作{S1,S2,...,Sn},然后其中的每一份与少数类样本结合组成n训练样本{D1,D2,...,Dn},然后再每一个训练集上得到一个模型,最后取这n个模型的均值

SMOTE算法

考虑到过采样可能导致过拟合的缺点,提出了一种合成少数类过采样技术—SMOTE算法

算法的原理:

对少数类的样本做KNN算法,求出他的K近邻为Sknn,然后从这K个邻居中选择若干样本,若少数类的样本为x,从K近邻中选择的样本为,x′

xnew=x+rand(0,1)∗(x′−x)

注意点:

求KNN的时候是对全集S上求而并不是仅选出x 在少数类集的K近邻。

x应该选少数类边界上的一些数据,即K2<S∩Sknn<K

其他的一些方法

换一种思路,将少数类样本看成异常,将其转换成一个异常检测的问题,异常检测

算法的角度

重构训练集的方法。不改变已有算法,而是根据样本的不同错分代价给训练集中的每一个样本赋一个权值,接着按权重对原始样本集进行重构。

引入代价敏感因子,设计出代价敏感的分类算法。通常对小样本赋予较高的代价,大样本赋予较小的代价,期望以此来平衡样本之间的数目差异。

代价敏感学习方法

数据不平衡情况下的评估指标

在数据不均衡情况下我们如果参考准确率,和召回率的话不能很好的衡量模型的性能。

我们可以参考一下几个指标:

AUC - 链接

F值

总结

这其实都是一些方法论的东西,具体的选择哪一种方法,还要依据实际的情况来定,希望能够活学活用。

参考资料

SMOTE算法

EasyEnsemble算法

大牛的分析1

大牛的分析2

专业的数术语
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息