什么是类别不均衡问题?
举个例子,在极端情况下,在总体为1000的样本,若中有999个样本标记为A类,有1个样本标记为B类。则很明显,A类与B类的样本数偏差极大。一般认为当类别比例超过4:1时,则认为类别不均衡。
解决方式?
主要分为以下这两种方式: 1.从数据集入手改变样本分布,降低不平衡程度 2.从学习算法入手,修改算法来适应不平衡的分类问题。且方式1更为简单。
重采样
重采样方法是通过增加稀有类训练样本数的上采样 (up-sampling)和减少大类样本数的下采样(down-samplings)使不平衡的样本分布变得比较平衡,从而提高分类器对稀有类的识别率 .
对于小样本来说上采样更合适
最原始的上采样方法是复制稀有类的样本 , 但是这样做容易导致过学习, 并且对提高稀有类识 别率没有太大帮助 .较高级的上采样方法则采用一些启发式技巧 , 有选择地复制稀有类样本 , 或者生成新的稀有类样本。Chawla等人提出的SMOTE算法是一种简单有效的上采样方法,该方法首先为每个稀有类样本随机选出几个邻近样本,并且在该样本与这些邻近的样本的连线上随机取点,生成无重复的新的稀有类样本。还有一些其他的方法,如添加随机噪声,还有一些其他的研究,具体可以看相关论文。
这里有SMOTE算法的多个不同语言的实现版本:
* Python: UnbalancedDataset模块提供了SMOTE算法的多种不同实现版本,以及多种重采样算法。
* R: DMwR package。
* Weka: SMOTE supervised filter。
但是上采样方法并不增加任何新的数据 , 只是重复一些样本或增加一些 人工生成的稀有类样本 , 增加了训练时间 .更危险的是 ,上采样复制某些稀有类样本 , 或者在它周围生成新的稀有类样本,使得分类器过分注重这些样本,导致过学习.上采样不能从本质上解决稀有类样 本的稀缺性和数据表示的不充分性 。
操作方式:
https://blog.csdn.net/nlpuser/article/details/81265614
//需要安装imblearn库,在此之前需要更新scipy等包的版本。imblearn所依赖包的版本如下: