ZhuNian的学习乐园

ZhuNian的学习乐园

在做特征工程时,有一部分的数据集会出现样本类别分布不均匀的情况,这种时候如果直接做分类,会使得模型只会学习到大样本类别数据的信息,无法学习小样本的数据,这样模型的预测效果和泛化能力都不是最优。

如果要达到最优的情况,一般在数据输入到模型之前会进行一些数据处理,包括数据集的构造+bagging,正负样本采样等操作。接下来,我从什么时候出现正负样本不均的情况,它会影响什么结果,以及最后解决的方法这三个角度,去梳理这类问题的过程。
 

(1)什么情况会遇到正负样本不均?

所谓的不平衡指的是不同类别的样本量异非常大。样本分布不均衡将导致样本量少的分类所包含的特征信息过少,并很难从中提取规律;即使得到分类模型,也容易产生过度依赖于有限的数据样本而导致过拟合的问题,当模型应用到新的数据上时,模型的准确性和鲁棒性将很差。

样本分布不平衡主要在于不同类别间的样本比例差异,以笔者的工作经验看,如果不同分类间的样本量差异达到超过10倍就需要引起警觉并考虑处理该问题,超过20倍就要一定要解决该问题。

一般在异常检测场景,发生频率低的等事件 上会出现正负样本不均。

 
(2)正负样本不均会影响什么结果?

不能用准确度这个指标来评价分类质量,在类别不均衡时,分类器会将所有的样本都分类到大类下面时,该指标值仍然会很高。即,该分类器偏向了大类这个类别的数据。

而一些其他评价指标 TPR,FPR ,AUC ,F1得分(F1 Score):(精确度与找召回率的加权平均)。不会受到影响。

TPR和FPR分别是基于实际表现1、0出发的,也就是说在实际的正样本和负样本中来观察相关概率问题。因此,无论样本是否均衡,都不会被影响。

例如总样本中有90%的正样本,10%的负样本。TPR能够得到90%正样本中有多少是被真正覆盖的,而与那10%无关。同理FPR能够得到10%负样本中有多少是被覆盖的,而与那90%无关。因此我们从实际表现的各个结果出发,就能避免样本不平衡的问题,这就是为什么用TPR和FPR作为ROC、AUC指标的原因。

 
(3)怎么解决正负样本不均?

  1. 增强数据集,获取更多的数据。
  2. 通过过抽样和欠抽样解决样本不均衡。 重新采样,针对小类数据进行过采样,大类数据进行欠采样。(过抽样(也叫上采样、over-sampling)方法通过增加分类中少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题;经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本,例如SMOTE算法。欠抽样(也叫下采样、under-sampling)方法通过减少分类中多数类样本的样本数量来实现样本均衡,最直接的方法是随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类样本中的一些重要信息。)
  3. 通过正负样本的惩罚权重解决样本不均衡。 思想是在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量类别权重高,大样本量类别权重低),然后进行计算和建模。如penalized-SVM和penalized-LDA算法。
  4. 通过组合/集成方法解决样本不均衡。例如,在数据集中的正、负例的样本分别为100和10000条,比例为1:100。此时可以将负例样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。

 
 
参考文章:
[1] 解决样本类别分布不均衡的问题 : https://www.cnblogs.com/bymo/p/9766358.html
[2] CTR 预估正负样本 不平衡,请问怎么解决 ?
[3] 在分类中如何处理训练集中不平衡问题
[4] 11.3 分类样本不平衡问题

12-04 15:40