热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何处理不平衡数据

如何处理不平衡数据实际数据往往分布得很不均匀,都会存在“长尾现象”,也就是所谓的“二八原理”。解决这一问题的基本思路是让正负样本在训练过程中拥有相同的话语权,比如利用采样与加权等方




如何处理不平衡数据

实际数据往往分布得很不均匀,都会存在“长尾现象”,也就是所谓的“二八原理”。解决这一问题的基本思路是让正负样本在训练过程中拥有相同的话语权,比如利用采样与加权等方法。为了方便起见,我们把数据集中样本较多的那一类称为“大众类”,样本较少的那一类称为“小众类”。


从数据的角度


1. 采样


1.1 上采样

上采样是把小众类复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动(对于图像而言,可以进行数据增强,得到新图像),经验表明这种做法非常有效。


1.2 下采样

下采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。因为下采样会丢失信息,如何减少信息的损失呢?第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果。


2 加权

还可以通过加权的方式来解决数据不平衡的问题,即对不同类别分错的代价不同。:对分类器的小类样本数据增加权值,降低大类样本的权值(这种方法其实是产生了新的数据分布,即产生了新的数据集,译者注),从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。


3. 异常检测

对于数据及其不平衡的场景,可以把它当成一个异常检测问题。


4.数据生成

数据合成方法是利用已有样本生成更多样本,SMOTE算法,利用小众样本在特征空间的相似性来生成新样本。对于样本





x


i




x_{i}


xi​,从它的K近邻中选取一个样本点





x



i


1





x_{i1}


xi1​生成一个新的小众样本,





x



n


e


w




=



x


i



+


(



x



i


1








x


i



)





β



x_{new} = x_{i} + ( x_{i1} - x_{i})*β


xnew​=xi​+(xi1​−xi​)∗β,




β



β


β是一个在[0,1]之间的数。


从评价指标的角度


  • 谨慎选取AUC作为评价指标,对于数据极端不平衡时,可以观察观察不同算法在同一份数据下的训练结果的precision和recall,这样做有两个好处,一是可以了解不同算法对于数据的敏感程度,二是可以明确采取哪种评价指标更合适。针对机器学习中的数据不平衡问题,建议更多PR(Precision-Recall曲线),而非ROC曲线,具体原因画图即可得知,如果采用ROC曲线来作为评价指标,很容易因为AUC值高而忽略实际对少两样本的效果其实并不理想的情况。
  • 不要只看accuracy

从算法的角度


  • 选择对数据相对不敏感的算法,比如说树模型

  • 集成学习:首先从多数类中独立随机抽取出若干子集,将每个子集与少数类数据联合起来训练生成多个基分类器,再加权组成新的分类器,如加法模型、Adaboost、随机森林等

  • 将任务转换成异常检测任务.


目标检测中的不平衡问题


  • focal loss:通过重塑标准交叉熵损失来解决这一类不平衡问题。他们的想法是降低简单的负面样本所占的权重。


推荐阅读
author-avatar
快乐的kang918_863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有