本文主要记录 《机器学习》一书中关于类别不平衡问题的处理。
类别不平衡问题(class-imbalance)就是说对于分类任务来说,不同类别的训练样例相差很大的情况。不是一般性,这里主要介绍负样本远远多于正样本的情况。(在阅读深度神经网络论文时,发现这种情况非常常见)。
首先从线性分类器的角度来进行理解。使用
y
=
ω
T
x
+
b
\boldsymbol {y=\omega^Tx}+b
y=ωTx+b 对新样本
x
\boldsymbol x
x 进行分类的时候,实际上是在用预测出的
y
\boldsymbol y
y 与一个阈值进行比较,比如通常情况下我们将这个阈值设置为 1。当大于 1 则判定为正例,否则判定为反例。
y
\boldsymbol y
y 实际上表达了正例的可能性,几率
y
1
−
y
\frac{y}{1-y}
1−yy 反映的是正例的可能性与反例的可能性的比值。当输出为 1 的时候表示两种可能性相同。所以有如下决策:
若
y
1
−
y
>
1
则
预
测
为
正
例
若\frac{y}{1-y}>1\ \ 则预测为正例
若1−yy>1 则预测为正例
然而,当训练样本中的正负样本数目不同的时候,这时我们令
m
+
m^+
m+ 表示正例样本的数量,
m
−
m^-
m− 表示负样本的数量,则可以得到观测几率
m
+
m
−
\frac{m^+}{m^-}
m−m+。因为通常假设训练集是真是样本集的无偏采样,所以观测几率也就代表了真实几率。所以应该存在下面的判定决策:
若
y
1
−
y
<
m
+
m
−
则
预
测
为
正
例
若\frac{y}{1-y}<\frac{m^+}{m^-}\ \ 则预测为正例
若1−yy<m−m+ 则预测为正例
但是分类器是根据
若
y
1
−
y
>
1
若\frac{y}{1-y}>1
若1−yy>1 进行决策,所以,需要对上面这个预测值进行调整。只需要做出如下调整即可:
y
′
1
−
y
′
=
y
1
−
y
×
m
−
m
+
\frac{y'}{1-y'}=\frac{y}{1-y}\times \frac{m^-}{m^+}
1−y′y′=1−yy×m+m−
而这也就是类别不平衡学习的基本策略——再缩放(rescaling)。
从上面的公式中我们就可以看出,再缩放的思想十分简单,但是在实际应用中却并不是很容易,主要是 “训练集是真实样本总体的无偏采样” 这个假设往往不成立,也就是说,不一定能有效基于训练样本的观测几率来推断出真是几率。
目前主要有三种方法:
- 直接对反例样本进行“欠采样”(undersampling),也就是去除一些反例使得正反样本数量接近,然后进行学习;
- 对训练集中的样本进行“过采样”(oversampling),也就是增加一些正例使得正反数目接近,然后进行学习;
- 直接基于原始训练集进行学习,但是在用训练好的分类器进行预测的时候,将上面的 y ′ 1 − y ′ = y 1 − y × m − m + \frac{y'}{1-y'}=\frac{y}{1-y}\times \frac{m^-}{m^+} 1−y′y′=1−yy×m+m− 嵌入到决策过程中,这种方法称为“阈值移动(threshold-moving)”。
在应用上面的方法的时候,需要注意以下几点:
- 过采样方法不能简单的对正例样本进行重复采样,这样做会造成严重的过拟合现象。典型算法是通过对训练集里的正例进行来产生额外的正例;
- 欠采样方法采用随机丢弃反例的方法也不妥,这样可能会丢失一些重要的信息;典型算法是利用集成学习机制,将反例划分为若干个集合供不同的学习器进行使用,这样对每个学习器看来都进行了欠采样,但是在全局看来并不会丢失重要信息。
参考内容:周志华–机器学习 Chapter 3.7