背景
所有数据存在DataFrame对象df中。数据分为两类:多数类别和少数类别,数据量相差大。数据预处理已将多数类别的Label标记为1,少数类别的Label标记为0。
一、下采样(以少的为标准,抽样逼近)
从多数类中随机抽取样本(抽取的样本数量与少数类别样本量一致)从而减少多数类别样本数据,使数据达到平衡的方式。
二、上采样(以多的为标准,扩量逼近)
和下采样采用同样的原理,通过抽样来增加少数样本的数目,从而达到数据平衡的目的。一种简单的方式就是通过有放回抽样,不断的从少数类别样本数据中抽取样本,然后使用抽取样本+原始数据组成训练数据集来训练模型;不过该方式比较容易导致过拟合,一般抽样样本不要超过50%。
因为在上采样过程中,是进行是随机有放回的抽样,所以最终模型中,数据其实是相当于存在一定的重复数据,为了防止这个重复数据导致的问题,我们可以加入一定的随机性,也就是说:在抽取数据后,对数据的各个维度可以进行随机的小范围变动,eg: (1,2,3) --> (1.01, 1.99, 3);通过该方式可以相对比较容易的降低上采样导致的过拟合问题。
三、人工合成数据策略(和上采样概念一致,通过生成新样本实现)
3.1 SMOTE算法介绍
SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术。SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
算法流程如下: 1. 对于少数类中的每一个样本xx,用欧式距离为标准计算它到少数类样本集SminSmin中所有样本的距离,得到其k近邻 2. 确定采样倍率NN,对于每一个少数类样本xx,从其k近邻中随机选择若干个样本,假设选择的近邻为xx 3. 对于每一个随机选出的近邻xx,分别与原样本按照如下的公式构建新的样本 xnew=x+rand(0,1)∗(x^−x);
smote算法具体细节可看链接:https://www.cnblogs.com/wqbin/p/11117616.html
3.2 SMOTE算法特殊应用
smote算法本质上是在原少数样本基础上找到距离较近的数值作为新样本,那么smote上采样算法就不能直接应用在既存在连续变量又存在离散变量的样本数据,具体解决方法可参考如下;
不应该对离散特征运用smote做上采样操作方法:
3.2.1 按照某一离散特征或类别特征对数据进行分组,之后每一组数据都为连续型特征,可以运用smote算法注:如果有多个离散特征列,则根据多列特征进行分组;
3.2.2 最后将多组数据重新合并,注意合并时要包含之前的 离散特征;