样本不平衡问题

不平衡问题的产生

机器学习中常常会遇到数据的类别不平衡(class imbalance),也叫数据偏斜(class skew)。
以常见的二分类问题为例,我们希望预测病人是否得了某种罕见疾病。但在历史数据中,阳性的比例可能很低(如百分之0.1)。
在这种情况下,学习出好的分类器是很难的,而且在这种情况下得到结论往往也是很具迷惑性的。
以上面提到的场景来说,如果我们的分类器总是预测一个人未患病,即预测为反例,那么我们依然有高达99.9%的预测准确率。然而这种结果是没有意义的,这提出了今天的第一个问题,如何有效在类别不平衡的情况下评估分类器?
当然,本文最终希望解决的问题是:在数据偏斜的情况下,如何得到一个不错的分类器?如果可能,是否可以找到一个较为简单的解决方法,而规避复杂的模型、数据处理,降低我们的工作量。
以二分类问题为例,undersampling和oversampling主要用于样本中正负比例极度不平衡的情况。比如广告的点击估计、信用卡诈骗识别、得病与否的预测等,通常目标为1的样本比例远小于1%。

不平衡问题两种产生的情况:

  • 正负样本(为了简化这里只讨论二分类)的获取成本不同导致的
    • 不完全标注问题,问题的核心是训练集和测试集的label分布不一致
    • 上采下采本质都是要改变训练数据的分布,让他和真实分布一致
  • 实际分布中本来就不平衡
    • 其实多数不需要采样,只要不用不科学的、愚蠢的评价方法即可

深度学习解决方案

  • 欠采样
  • 过采样
    • 数据增强
      • SMOTE过采样
      • k近邻单词替换
  • 修改损失函数/代价函数优化

文本中的数据增强不太常见,这里我们使用了shuffle和drop两种数据增强,前者打乱词顺序,后者随机的删除掉某些词。效果举例如图:
样本不平衡问题_第1张图片

工具与类库

  • imbalanced-learn是一个Python上处理数据不平衡的工具库

你可能感兴趣的:(#,评价指标,nlp,tensorflow,深度学习)