类别不平衡问题的解决方法:过采样、欠采样和再平衡

版权声明:未经允许,禁止转载 https://blog.csdn.net/weixin_43216017/article/details/86713157

类别不平衡问题: 指的是在分类任务中不同类别的训练样本数目差异很大的问题。

我们简单举一个例子:如果我们要判断一名大学生究竟是研究生还是本科生,我们已知在大学中本科生的数量会远远高于研究生的数量,我们假设本科生与研究生比例为9:1。此时,我们只需要将所有学生都判断成是本科生,这样我们的模型就有90%的正确率。但是这样的模型是没有意义的,因为它不可以识别研究生。

所以,各种分类学习的方法都有一个基本的假设:不同类别的训练样例数目相当,或者差异不大。

但是,当这一假设不成立的时候,我们的分类学习方法可能不会得到良好的结果。为了解决这一问题,现在大体上有三种方法。不失一般性,我们认为正例的样本数量远高于反例。

方法一:欠采样

欠采样(亦称为下采样)的思想很简单:对训练集中的正例进行欠采样,即去除一些正例,使得正例和反例的数目相当,在进行学习。

欠采样法的优势在于,它缩小了样本数目,时间成本将会缩小;但是,也就是因为其缩小了样本数量,模型的准确率可能得不到保证,并且随机删除样例也会造成信息的丢失。

目前比较好的方法是将欠采样应用到集成学习中,即对正例进行多次欠采样,之后配以反例,从而形成多组正例/反例数据集,供多个学习器使用。这样看来,每个学习器都采用了欠采样,但是在全局看来不会丢失重要信息。

方法二:过采样

过采样(亦称为上采样)的思想也很简单:对训练集中的反例进行过采样,即增加一些反例使得正例和反例的数目相同,之后在进行学习。

过采样的方法增加了数据量,同时也增加了学习的时间成本。需要注意的是:过采样不能简单的从反例中随机抽取样本,因为这样会导致严重的过拟合问题。

目前比较好的解决方法是通过对反例的插值来产生额外的反例,进而将正例和反例的数量调整至大致相当。

方法三:再缩放

我们分类器的工作原理是预测出 y y 值, y y 表达的是正例的可能性。然后将 y y 与一个阈值进行比较,通常都是与0.5进行比较,若 y > 0.5 y>0.5 时判为正例,否则为反例。

上式也可写为:若 y 1 y > 1 \dfrac{y}{1-y} > 1 ,则预测为正例 …①

y 1 y \dfrac{y}{1-y} 表达的是正例可能性和反例可能性的比值,阈值0.5表明分类器认为正例反例可能性相同。

所以,当我们样本集中的正例和反例数量相差较大的时候,令 m + m^+ 表示正例数量,令 m m^- 表示反例数量,此时我们只要将分类器的决策规则稍微修改即可:
y 1 y > m + m 若\dfrac{y}{1-y} > \dfrac{m^+}{m^-},则预测为正例
\Rightarrow
y 1 y × m m + > 1 若\dfrac{y}{1-y} \times \dfrac{m^-}{m^+}>1 ,则预测为正例

但是,我们的分类器是基于①式的形式进行决策的,所以我们对其进行调整:
y 1 y > 1 \dfrac{y'}{1-y'} > 1 ,则预测为正例,其中 y = m y m + m + y + m y y' = \dfrac{m^-y}{m^+-m^+y+m^-y}

猜你喜欢

转载自blog.csdn.net/weixin_43216017/article/details/86713157