数据集的非均衡问题(imbalanced data)和应对方法

写在前面:

作者是数据挖掘/机器学习新人进阶,专栏目的是分享自己的学习与进阶过程,把自己觉得有趣有价值的内容放上来。内容基本总结自我看过的英文教材/论文/论坛,如果涉及到侵权等问题麻烦私信。这一篇的主要内容是在分类问题中解决不平衡(imbalanced)问题的思路,深入的数学原理及推理在参考文献中。我自己是R-user,正在学习Python,这篇文章不会有很实用的package教程,想看教程的可以去CSDN和github搜索相应的教程。如果有任何不清楚或不准确的描述,希望各位读者指出,多多指教啦!

 


什么是非均衡?

分类(classification)问题是数据挖掘领域中非常重要的一类问题,目前有琳琅满目的方法来完成分类。然而在真实的应用环境中,分类器(classifier)扮演的角色通常是识别数据中的“少数派”,比如:

  • 银行识别信用卡异常交易记录
  • 垃圾邮件识别
  • 检测流水线识别残次品
  • 病情监测与识别等等

在这样的应用环境下,作为少数派的群组在数据总体中往往占了极少的比例:绝大多数的信用卡交易都是正常交易,八成以上的邮件都是正常邮件,大多数的流水线产品是合格产品,在进行检查的人群中特定疾病的发病率通常非常低。翻译成机器学习的语言就是在训练集(Training
set)中,标签为“1“的类别比例极低。以我本人的学习经历作为参考,在未经别人提醒的情况下,数据挖掘初学者往往会忽略这一问题。


忽略数据组的非均衡问题会有什么后果?

 

试想你的训练集(training set)是xx银行过去一年的信用卡交易记录,你将测试集(test set)数据放到你的分类器后,发现你的分类器准确率(accuracy)高达98%,98%的数据都被分到了正确的组中!

但是这是值得庆祝的结果么?

不一定。Your classifier is cheating you.

当你仔细研究数据会发现,信用卡交易数据中有98%记录都是正常的消费转账记录,仅有2%是信用卡盗刷记录。在默认设置(Default)下,分类器的训练目标是准确率最大化(i.e.错误率最小化),分类器只要忽略那些少得可怜的异类,将全部数据都打上0,即[正常交易]的标签,就可以达到98%的准确率。但这显然不是我们想要的结果,看似极高的准确率只是体现了样本本身的分布而已,而将一个异类样本错判为正常样本的成本往往非常大(试想银行未能识别信用卡盗刷而造成的损失,或是乳腺癌筛查将初期患者错误诊断为正常人所带来的后果)。

仔细思考就不难发现在这样的数据集中,我们经常使用的分类器评估方法——准确率就会失效(准确率accuracy=被正确分类的样本量/样本总量)。一般来说,当两组样本数量的比例超过4:1时,不均衡问题就会非常严重,值得重视。

 


寻求解决方案之前——重新思考模型的评估标准

 

面对非均衡数据,首先要做的是放弃新手通常使用的模型评估方法——准确率。如果不能正确衡量模型的表现,何谈改进模型。

放弃准确率的原因非常明显,上文的例子中已经非常直观,下面提供一些更加合理的评估方法,让你在面对非均衡数据时心里更有底气。

1.kappa系数
2.ROC
3.F-score
4.Precision & Recall


不完全解决之道

 

面对非均衡数据,通常有以下几种解决的思路:

1. 重采样(Resampling):让多的变少,少的变多

上采样(over-sampling): SMOT及其衍生技术

下采样(under-sampling):Clustering ;Tomek links

2.调整损失函数(Changing loss function):从算法层面上让模型对少数类样本更敏感

3.换个思路:不要局限于1V1分类问题

转换为离群值监测的数据框架

转换为多分类问题

每一个思路下都有很多不同的方法,根据模型目的和数据本身特征的不同,可以按需尝试不同的方法:

1. 重采样

重采样的目的是将数据中两类的数量调整均衡一些,让少的变多,多的变少,这样在训练模型时依然能够将准确率最大化作为优化目标,这是最省事的方法。

按照处理对象的不同,分为上采样(over-sampling,让少的变多)和下采样(undersampling,让多的变少)。

重采样方法( Tom Fawcett,2015)

1.1下采样(under-sampling)

下采样(under-sampling)通过减少分类中多数样本的数量来均衡样本的结构。最简单粗暴的方法是随机删掉一些多数类样本,代价是删除样本的同时也有可能删除了一些信息,通常使用的方法有:

聚类(Cluster)

对于多数类样本,计算K近邻的空间距离(如欧式距离),用K近邻的重心(centroid)代替原本的K个样本,形成新的多数类样本组。因此聚类最终的样本量由少数类样本的数量决定。

Tomek links(不知道怎么翻译)

Tomek links是指相反类样本的配对,这样的配对距离非常近,也就是说这样的配对中两个样本的各项指标都非常接近,但是属于不同的类。如图所示,这一方法能够找到这样的配对,并删除配对中的多数类样本。经过这样的处理,两类样本之间的分界线变得更加清晰,使少数类的存在更加明显。

Tomek Links 示意图(图片摘自Kaggle)

1.2 上采样(over-sampling)

上采样(over-sampling)是常用的应对不均衡数据的方法,通过增加分类中少数类样本的数量来均衡数据结构。因为其常用,也发展出了很多不同的上采样技术。

最简单的上采样技术是随机有放回地抽取少数量样本,复制一份后加入总样本中。但是如果数据的特征维度较小,简单的抽取复制容易造成过拟合(over-fitting)。经过多年的发展,上采样有以下几种常用的技术来避免过拟合:

  • 合成新样本:SMOT (Synthetic Minority Over-sampling Technique)及其衍生技术

严格来讲,SMOT不应该放在重采样中,因为操作不涉及重复采样,而是依据现有的少数类样本人为制造一些新的少数类样本,放在这里是因为SMOT及其衍生技术也是上采样的一种方式。

对于少数类样本,SMOT在p个维度上找到K近邻,利用这K个近邻的各项指标,乘上一个0到1之间的随机数,就能组成一个新的少数类样本。因此也很容易发现,SMOT只能够生成少数类样本凸包(convex hall)内的新样本,而永远不可能生成“离群”的样本。

ADASYN(Adaptive Synthetic Sampling Approach)

ADASYN是常用的SMOT的衍生技术之一,相比于SMOT在每一个少数类样本周围创造新样本,ADASYN给每个少数类样本分配了权重,在那些学习难度较高的少数类样本周围创造更多的样本:即在k-近邻分类器错误分类 的原始样本的旁边生成新的样本。这样的方式有点像人的学习规律:我们总是从犯过的错误中学到更多的经验。

关于上采样和下采样的选择(Wallace.et al,2011)。因此在使用过程中的建议是两种方法都尝试,选择表现较好的那一种。

 

2.调整损失函数

调整损失函数的目的本身是为了使模型对少数量样本更加敏感。训练任何一个机器学习模型的最终目标是损失函数(loss function)的最小化,如果能够在损失函数中加大错判少数类样本的损失,那么模型自然而然能够更好地识别 出少数类样本。

调整损失函数的一个通用做法是惩罚错判少数类(penalizing),采用一种cost-sensitive的损失函数

在训练过程中加。上惩罚项是正则化(regularization)常用的手段,在面对非均衡数据时,我们可以采用同样的思路,给错判的少数类样本加上一个惩罚系数,加入损失函数中。这样在训练过程中,模型会自然而然地对少数类样本更为敏感,比如penalized-SVM和penalized-LDA这样的方法。

 

3.换个思路

有时候换个思路也许能够带来一些意外的收获:

  • 将分类问题转换成为一个异常值监测框架

将少数类样本作为离群值(outliers)或许能够带来新的思路。使用基于簇、基于距离、基于密度等方法或许能够获得较好的效果。

  • 再次分组

对于不均衡程度较低的数据,可以将多数量样本进一步分为多个组,虽然二分类问题被转化成了一个多分类问题,但是数据的不平衡问题被解决,接下来就可以使用多分类中的一对多(OVA)或一对一(OVO)的分类方式进行分类。


总之,在面对非均衡数据时,没有万精油的解决方案,很多思路都值得尝试。模型没有对错,只有适合与不适合。

 

参考资料:

Kappa指数:

Performance Measures: Cohen's Kappa statistic - The Data Scientist​thedatascientist.com图标

ROC:

Assessing and Comparing Classifier Performance with ROC Curves​machinelearningmastery.com图标

F-score(F1 score)

F1 score - Wikipedia​en.wikipedia.org图标

 

参考文献:

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

“Class Imbalance, Redux”. Wallace, Small, Brodley and Trikalinos. IEEE Conf on Data Mining. 2011

 

 

 

 

发布于 2018-06-29

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值