SMOTE过采样技术
目录
- 类别不平衡问题
- 类别不平衡引发的问题
- 解决不平衡问题的方法
- SMOTE算法
论文:SMOTE Synthetic Minority Over-sampling Technique
1. 类别不平衡问题
类不平衡 (class-imbalance) 是指在训练分类器中所使用的训练集的类别分布不均。 比如说一个二分类问题,1000个训练样本,比较理想的情况是正类、负类样本的数量相差不多;而如果正类样本有995个、负类样本仅5个,就意味着存在类别不平衡。
在后文中,把样本数量过少的类别称为“少数类”。 但实际上,数据集上的类不平衡到底有没有达到需要特殊处理的程度,还要看不处理时训练出来的模型在验证集上的效果,有些时候是没必要处理的。
2. 类别不平衡引发的问题
2.1 模型训练过程角度
从训练模型的角度来说,如果某类的样本数量很少,那么这个类别所提供的“信息”就太少。
使用经验风险 (模型在训练集上的平均损失) 最小化作为模型的学习准则。设损失函数为 0-1 loss(这是一种典型的均等代价的损失函数),那么优化目标就等价于错误率最小化(也就是accuracy最大化)。
考虑极端情况:1000个训练样本中,正类样本999个,负类样本1个。 训练过程中在某次迭代结束后,模型把所有的样本都分为正类,虽然分错了这个负类,但是所带来的损失实在微不足道,accuracy已经是99.9%。 于是满足停机条件或者达到最大迭代次数之后自然没必要再优化下去,训练结束!于是这个模型……
模型没有学习到如何去判别出少数类,这时候模型的召回率会非常低。
2.2 模型预测过程角度
考虑二项Logistic回归模型。输入一个样本 $x$ ,模型输出的是其属于正类的概率 $\hat{y}$ 。当 $\hat{y} > 0.5$ 时,模型判定该样本属于正类,否则就是属于负类。
为什么是0.5呢?可以认为模型是出于最大后验概率决策的角度考虑的,选择了0.5意味着当模型估计的样本属于正类的后验概率要大于样本属于负类的后验概率时就将样本判为正类。但实际上,这个后验概率的估计值是否准确呢?
从几率 (odds) 的角度考虑:几率表达的是样本属于正类的可能性与属于负类的可能性的比值。模型对于样本的预测几率为:$ \frac{\hat{y}}{1-\hat{y}} $。
模型在做出决策时,当然希望能够遵循真实样本总体的正负类样本分布:设 $\theta$ 等于正类样本数除以全部样本数,那么样本的真实几率为: $ \frac{\theta}{1-\theta} $。 当观测几率大于真实几率时,也就是 $ \hat{y} > \theta $ 时,那么就判定这个样本属于正类。
虽然我们无法获悉真实样本总体,但之于训练集,存在这样一个假设:训练集是真实样本总体的无偏采样。 正是因为这个假设,所以认为训练集的观测几率 $ \frac{\hat{\theta}}{1-\hat{\theta}} $ 就代表了真实几率 $ \frac{\theta}{1-\theta} $ 。
所以,在这个假设下,当一个样本的预测几率大于观测几率时,就应该将样本判断为正类。
3. 解决不平衡问题的方法
3.1 调整$\theta$值
根据训练集的正负样本比例,调整 $ \theta $ 值。
这样做的依据是上面所述的对训练集的假设。但在给定任务中,这个假设是否成立,还有待讨论。
3.2 欠采样
对训练集里面样本数量较多的类别(多数类)进行欠采样,抛弃一些样本来缓解类不平衡。
3.3 过采样
对训练集里面样本数量较少的类别(少数类)进行过采样,合成新的样本来缓解类不平衡。下面将介绍一种经典的过采样算法:SMOTE。
4. SMOTE算法
SMOTE,合成少数类过采样技术。它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题, 即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
4.1 SMOTE算法流程
设训练集的一个少数类的样本数为 $T$ ,那么SMOTE算法将为这个少数类合成 $NT$ 个新样本。这里要求 $N$ 必须是正整数,如果给定的 $N<1$, 那么算法将“认为”少数类的样本数 $T=NT$,并将强制 $N=1$。
- 考虑该少数类的一个样本 $i$ ,其特征向量为 $x_i, i \in \lbrace 1,…,T \rbrace$:
- (1) 首先从该少数类的全部 $T$ 个样本中找到样本 $x_i$ 的 $k$ 近邻(例如用欧氏距离),记为 $ x_{i,near}, near \in \lbrace 1,…,k \rbrace $;
- (2) 然后从这 $k$ 近邻中随机选择一个样本 $x_{i,nn}$,再生成一个 $0$ 到 $1$ 之间的随机数 $\eta_1$,从而合成一个新样本 $x_{i,1} $:
- (3) 将步骤(2)重复进行 $N$ 次,从而可以合成 $N$ 个新样本:$x_{i,new}, new \in \lbrace 1,…,N \rbrace $。
那么,对全部的 $T$ 个少数类样本进行上述操作,便可为该少数类合成 $NT$ 个新样本。
如果样本的特征维数是 2 维,那么每个样本都可以用二维平面上的一个点来表示。 SMOTE算法所合成出的一个新样本 $x{i,1}$ 相当于是表示样本 $x_i$ 的点和表示样本 $x{i,nn}$ 的点之间所连线段上的一个点。所以说该算法是基于“插值”来合成新样本。
进一步阅读