项目中出现了二分类数据不平衡问题,我过去经常简单的使用过采样的方法,但是存在诸多弊病,研究总结下对于类别不平横问题的处理经验:
文章目录
- 一、为什么类别不平衡会影响模型的输出
- 二、解决办法
- 三、经验
一、为什么类别不平衡会影响模型的输出
许多模型的输出类别是基于阈值的,例如逻辑回归中小于0.5的为反例,大于则为正例。在数据不平衡时,默认的阈值会导致模型输出倾向与类别数据多的类别。
二、解决办法
- 调整分类阈值,使得更倾向与类别少的数据
- 选择合适的评估标准,比如ROC或者F1,而不是准确度(accuracy)
- 过采样法(sampling):来处理不平横的问题。分为欠采样(undersampling)和过采样(oversampling)两种。
过采样:重复正比例数据,实际上没有为模型引入更多数据,过分强调正比例数据,会放大正比例噪音对模型的影响。
欠采样:丢弃大量数据,和过采样一样会存在过拟合的问题。
由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General)
- 数据合成:SMOTE(Synthetic Minority Oversampling Technique)即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
三、经验
- 采样方法一般比直接调整阈值的方法好
- 使用采样方法一般可以提升模型的泛化能力,但有一定过拟合的风险,应搭配使用正则化模型
- 过采样的结果较为稳定,作为一种升级版的过采样,SMOTE也是不错的处理方式,大部分时候和过采样的结果相似
- 过采样大部分时候比欠采样的方法好,但很难一概而论那种方法更好,还是需要根据数据的特性(如分布)具体讨论
- 实验结果在(L2正则的逻辑回归、随机森林、Xgboost)一致,因此和采样法搭配的模型可以很好的处理过拟合。