【类别不平衡问题】
对于分类学习方法,都有一个共同的假设,即:不同类别的训练样例数目相同
如果不同类别的训练样例数目稍有差别,通常对分类影响不大,但是若差别很大,则会对学习造成影响,测试结果非常差
对于二分类问题,假设有 $998$ 个反例,$2$ 个正例,那么学习方法只需返回一个永远将新样本预测为反例的分类器,就能达到 $99.8\%$ 的精度,显然,这样的分类器没有价值
对于多分类问题,在将其拆解为多个二分类任务时,当使用 OvR 或 MvM 策略后,产生的二分类任务就有可能出现类别不平衡(Class-imbalance),即分类任务中不同类别的训练样例数目差别很大
例如,在银行信用欺诈交易识别中,属于欺诈交易的应该是很少部分,绝大部分交易是正常的,这就是一个正常的类别不平衡问题
一般而言,如果类别不平衡比例超过 $4:1$,那么分类器会因为数据不平衡性而无法满足分类要求,因此在构建分类模型之前,需要对分类不平衡性问题进行处理
【再缩放策略】
基本思想
从线性分类器的角度进行讨论,当使用 $\hat{y}=f(\mathbf{x_i};\boldsymbol{\theta})$ 对新样本进行拟合时,事实上是在用预测出的 $\hat{y}$ 与一个阈值比较,一般来说,通常将阈值设为 $0.5$,即在 $\hat{y}>0.5$ 时判为正类,在 $\hat{y}\leq 0.5$ 时判为负类
$\hat{y}$ 实际上反映了 $\mathbf{x}$ 为正类的可能性,$1-\hat{y}$ 反应了 $\mathbf{x}$ 为负类的可能性,两者的比值 $\frac{\hat{y}}{1-\hat{y}}$ 称为几率(Odds),其反应了 $\mathbf{x}$ 为正类的相对可能性
当阈值设为 $0.5$ 时,恰好表明分类器认为 $\mathbf{x}$ 为正类、负类的可能性相同,即分类器的决策规则为:
当训练集中正类、反类数目不同时,用 $n^+$ 表示正类数目,$n^-$ 表示负类数目,则观测几率为 $\frac{n^+}{n^-}$,假设训练集是真实样本总体的无偏估计,这时,观测几率就代表真实几率
因此,只要分类器的预测几率高于观测几率,就判为正类,即:
但分类器是基于 $\frac{\hat{y}}{1-\hat{y}}>1$ 进行决策的,因此需要对预测值进行调整,使其基于 $\frac{\hat{y}}{1-\hat{y}}>\frac{n^+}{n^-}$ 执行 $\frac{\hat{y}}{1-\hat{y}}>1$,即再缩放(Rescaling)策略:
简单来说,就是通过调整数据集中正类和负类的数目,从而对预测值进行缩放调整
再缩放策略虽然简单,但实际操作却没这么容易,因为在实际应用中,假设训练集是真实样本总体的无偏估计这个假设往往不成立,即不能有效地基于训练集观测几率来推断真实几率
策略的实现
在实际应用中,有以下五种公认的方法去对数据集进行调整:
- 随机减少大类的样本数量
- 随机减少特定大类的样本数量
- 随机增大小类的样本数量
- 随机增大特定小类的样本数量
- 修改阈值,使阈值更符合实际情况
其中,通过实现第 1、2 种方法来使用再缩放策略的方法被称为欠采样,通过实现第 3、4 种方法来使用再缩放策略的方法被称为过采样,通过实现第 5 种方法来使用再缩放策略的方法被称为阈值移动
【欠采样】
欠采样(Under-sampling)是指对大类的数据样本进行采样,从而减少该类数据样本的个数,使其与其他类的数目接近,然后再进行学习
目前,最常用的欠采样算法是 AdaBoost 迭代算法,其是为解决基于随机丢弃大类样本可能会丢失一些重要信息的问题
AdaBoost 迭代算法 是基于集成学习(Ensemble Learning)中简单集成(Easy Ensemble)的思想,其将大类随机分为若干个集合,每个集合分别与小类合并,得到多个新的训练子集,再利用每个训练子集分别训练 AdaBoost 弱分类器,最后集成所有的 AdaBoost 弱分类器,最终得到经过提升的的 AdaBoost 强分类器
这样对每个弱分类器来看,都进行了欠采样,在全局来看,没有丢失重要信息
【过采样】
过采样(Over-sampling)是指增加小类数据样本的个数,使其与其他类的数目接近,然后再进行学习,其代表算法是 SMOTE 算法
要注意的是,过采样不能简单地对小类进行重复采样,这会导致出现过拟合
SMOTE 算法通过数据插值的思想来产生额外的小类样本数据,其基本思想是:对每个小类样本 $a_i$,从其最近的 $k$ 个邻居中随机选择一个样本 $b_i$,然后在 $a_i$ 与 $b_i$ 的连线上随机选择一点,作为新合成的小类样本 $c_i$
SMOTE 算法有效地防止了过拟合问题,但可能扩大噪声的影响范围,并加剧分类边界模糊化
【阈值移动】
在分类问题中,阈值一般设为 $0.5$,当有可能出现类别不平衡问题时,可以根据实际情况对阈值进行移动,调整阈值,进而增加某一类的权重,以达到解决类别不平衡问题的目的,这就是阈值移动(Threshold Moving)
也就是说,阈值移动是直接基于原始训练集进行学习,在完成训练要进行预测时,将再缩放策略,即:
嵌入到决策过程中,通过改变阈值来达到解决类别不平衡问题的目的