七、类别不平衡问题
通常在机器学习中都有一个基本假设:不同类别的训练样本数目相当。
如果不同类别的训练样本数目稍有差别,通常影响不大。
如果不同类别的训练样本数目差别很大(极端情况下,如正类样本只有十个,反类样本一百万个),则会对学习过程造成影响。这就是类别不平衡问题(
class-imbalance
)。这里讨论中,假设正类样本偏少、反类样本偏多。
对于类别不平衡问题,常用的有三种方法:
- 基于再缩放策略进行决策,称之为阈值移动
threshold-moving
。 - 直接对训练集里的反类样本进行欠采样
undersampling
。 - 直接对训练集里的正类样本进行过采样
oversampling
。
- 基于再缩放策略进行决策,称之为阈值移动
对于正负样本极不平衡的场景,可以完全换一个不同的角度来看问题:将它看作一分类
One Class Learning
或者异常检测Novelty Detection
问题。此时可以用
One-class SVM
模型。
7.1 再缩放
假设对样本 进行分类时,预测为正类的概率为 。常规的做法是将 与一个阈值,比如 0.5 , 进行比较。 如果 时,就判别该样本为正类。
概率 刻画了样本为正类的可能性, 几率 刻画了正类可能性与反类可能性的比值。
当存在类别不平衡时,假设 表示正类样本数目, 表示反类样本数目,则观测几率是 。
假设训练集是真实样本总体的无偏采样,因此可以用观测几率代替真实几率。于是只要分类器的预测几率高于观测几率就应该判断为正类。即如果 , 则预测为正类。
通常分类器都是基于概率值来进行预测的,因此需要对其预测值进行调整。在进行预测的时候,令:
然后再将 跟阈值比较。这就是类别不平衡学习的一个基本策略:再缩放
rescalling
。再缩放虽然简单,但是由于“训练集是真实样本总体的无偏采样”这个假设往往不成立,所以无法基于训练集观测几率来推断出真实几率。
7.2 欠采样
欠采样会去除一些反类使得正、反类数目接近。
欠采样若随机抛弃反类,则可能丢失一些重要信息。
常用方法是将反类划分成若干个集合供不同学习器使用,这样对每个学习器来看都是欠采样,但是全局来看并不会丢失重要信息。
7.3 过采样
过采样会增加一些正类使得正、反类数目接近。
过采样不能简单的对原始正类进行重复采样,否则会导致严重的过拟合。
通常在原始正类之间插值来生成额外的正类。
常见的有以下过采样策略:
SMOTE
方法:对于每个正类样本 ,从它的 近邻中随机选取一个样本点 ,然后根据下式生成一个新的正类样本: ,其中 是随机数。该方法有两个问题:
增加了正类样本之间重叠的可能性。
生成了一些没有提供有益信息的样本。
Borderline-SMOTE
方法:它类似SMOTE
,但是对于每个正类样本 ,首先要评估:是否应该为该正类样本生成新的样本点。评估准则是:如果 的 近邻中,有超过一半以上的反类样本,则为该正类样本生成新样本。
反类样本超过一半,则说明该正类样本位于正类与反类的边界。如果 的 近邻中正类样本比较多,则该正类样本很可能就是处于一群正类样本的内部。
该方法生成新样本的算法与
SMOTE
方法相同。