类不平衡问题与SMOTE过采样算法

      遇到了各个类别的样本量分布不均的问题——某些类别的样本数量极多,而有些类别的样本数量极少,也就是所谓的类不平衡(class-imbalance)问题。

      本篇简述了以下内容:

      什么是类不平衡问题

      为什么类不平衡是不好的

      几种解决方案

      SMOTE过采样算法

      进一步阅读

什么是类不平衡问题

      类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均。比如说一个二分类问题,1000个训练样本,比较理想的情况是正类、负类样本的数量相差不多;而如果正类样本有995个、负类样本仅5个,就意味着存在类不平衡。

      在后文中,把样本数量过少的类别称为“少数类”。

      但实际上,数据集上的类不平衡到底有没有达到需要特殊处理的程度,还要看不处理时训练出来的模型在验证集上的效果。有些时候是没必要处理的。

为什么类不平衡是不好的

从模型的训练过程来看

      从训练模型的角度来说,如果某类的样本数量很少,那么这个类别所提供的“信息”就太少。

      使用经验风险(模型在训练集上的平均损失)最小化作为模型的学习准则。设损失函数为0-1 loss(这是一种典型的均等代价的损失函数),那么优化目标就等价于错误率最小化(也就是accuracy最大化)。考虑极端情况:1000个训练样本中,正类样本999个,负类样本1个。训练过程中在某次迭代结束后,模型把所有的样本都分为正类,虽然分错了这个负类,但是所带来的损失实在微不足道,accuracy已经是99.9%,于是满足停机条件或者达到最大迭代次数之后自然没必要再优化下去,ok,到此为止,训练结束!于是这个模型……

      模型没有学习到如何去判别出少数类。

从模型的预测过程来看

      考虑二项Logistic回归模型。输入一个样本 xx 的点之间所连线段上的一个点。所以说该算法是基于“插值”来合成新样本。

进一步阅读

      有两篇翻译自国外博客的文章:

      解决真实世界问题:如何在不平衡类上使用机器学习?

      从重采样到数据合成:如何处理机器学习中的不平衡分类问题?

可以先读中文的了解一下说了哪些事情,如果感兴趣的话就去看英文原文来深入学习。  

 

参考:

《机器学习》,周志华

SMOTE: Synthetic Minority Over-sampling Technique,JAIR'2002

你可能感兴趣的:(机器学习)