-
2019-03-31 15:53:40
在分类中如何处理训练集中不平衡问题
在很多机器学习任务中,训练集中可能会存在某个或某些类别下的样本数远大于另一些类别下的样本数目。即类别不平衡,为了使得学习达到更好的效果,因此需要解决该类别不平衡问题。
Jason Brownlee的回答:
原文标题:8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset
当你在对一个类别不均衡的数据集进行分类时得到了90%的准确度(Accuracy)。当你进一步分析发现,数据集的90%的样本是属于同一个类,并且分类器将所有的样本都分类为该类。在这种情况下,显然该分类器是无效的。并且这种无效是由于训练集中类别不均衡而导致的。
首先举几个所收到的邮件中关于类别不均衡的例子:- 在一个二分类问题中,训练集中class 1的样本数比class 2的样本数是60:1。使用逻辑回归进行分类,最后结果是其忽略了class 2,即其将所有的训练样本都分类为class 1。
- 在分类任务的数据集中,有三个类别,分别为A,B,C。在训练集中,A类的样本占70%,B类的样本占25%,C类的样本占5%。最后我的分类器对类A的样本过拟合了,而对其它两个类别的样本欠拟合。
什么是类别不均衡问题
类别数据不均衡是分类任务中一个典型的存在的问题。简而言之,即数据集中,每个类别下的样本数目相差很大。例如,在一个二分类问题中,共有100个样本(100行数据,每一行数据为一个样本的表征),其中80个样本属于class 1,其余的20个样本属于class 2,class 1:class2=80:20=4:1,这便属于类别不均衡。当然,类别不均衡问同样会发生在多分类任务中。它们的解决方法是一样的。因此,为了便于讨论与理解,我们从二分类任务入手进行讲解。
类别不均衡问题是现实中很常见的问题
大部分分类任务中,各类别下的数据个数基本上不可能完全相等,但是一点点差异是不会产生任何影响与问题的。
在现实中有很多类别不均衡问题,它是常见的,并且也是合理的,符合人们期望的。如,在欺诈交易识别中,属于欺诈交易的应该是很少部分,即绝大部分交易是正常的,只有极少部分的交易属于欺诈交易。这就是一个正常的类别不均衡问题。又如,在客户流失的数据集中,绝大部分的客户是会继续享受其服务的(非流失对象),只有极少数部分的客户不会再继续享受其服务(流失对象)。一般而已,如果类别不平衡比例超过4:1,那么其分类器会大大地因为数据不平衡性而无法满足分类要求的。因此在构建分类模型之前,需要对分类不均衡性问题进行处理。
在前面,我们使用准确度这个指标来评价分类质量,可以看出,在类别不均衡时,准确度这个评价指标并不能work。因为分类器将所有的样本都分类到大类下面时,该指标值仍然会很高。即,该分类器偏向了大类这个类别的数据。八大解决方法
- 可以扩大数据集吗?
当遇到类别不均衡问题时,首先应该想到,是否可能再增加数据(一定要有小类样本数据),更多的数据往往战胜更好的算法。因为机器学习是使用现有的数据多整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好分布估计。即使再增加小类样本数据时,又增加了大类样本数据,也可以使用放弃一部分大类数据(即对大类数据进行欠采样)来解决。 尝试其它评价指标
从前面的分析可以看出,准确度这个评价指标在类别不均衡的分类任务中并不能work,甚至进行误导(分类器不work,但是从这个指标来看,该分类器有着很好的评价指标得分)。因此在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。如何对不同的问题选择有效的评价指标参见这里。
上面的超链接中的文章,讲述了如何对乳腺癌患者复发类别不均衡数据进行分类。在文中,推荐了几个比传统的准确度更有效的评价指标:
- 混淆矩阵(Confusion Matrix):使用一个表格对分类器所预测的类别与其真实的类别的样本统计,分别为:TP、FN、FP与TN。
- 精确度(Precision)
- 召回率(Recall)
- F1得分(F1 Score):精确度与找召回率的加权平均。
特别是:
- Kappa (Cohen kappa)
- ROC曲线(ROC Curves):见Assessing and Comparing Classifier Performance with ROC Curves
对数据集进行重采样
可以使用一些策略该减轻数据的不平衡程度。该策略便是采样(sampling),主要有两种采样方法来降低数据的不平衡性。- 对小类的数据样本进行采样来增加小类的数据样本个数,即过采样(over-sampling ,采样的个数大于该类样本的个数)。
- 对大类的数据样本进行采样来减少该类数据样本的个数,即欠采样(under-sampling,采样的次数少于该类样本的个素)。
采样算法往往很容易实现,并且其运行速度快,并且效果也不错。更详细的内容参见这里。
一些经验法则:- 考虑对大类下的样本(超过1万、十万甚至更多)进行欠采样,即删除部分样本;
- 考虑对小类下的样本(不足1为甚至更少)进行过采样,即添加部分样本的副本;
- 考虑尝试随机采样与非随机采样两种采样方法;
- 考虑对各类别尝试不同的采样比例,比一定是1:1,有时候1:1反而不好,因为与现实情况相差甚远;
- 考虑同时使用过采样与欠采样。
- 尝试产生人工数据样本
一种简单的人工样本数据产生的方法便是,对该类下的所有样本每个属性特征的取值空间中随机选取一个组成新的样本,即属性值随机采样。你可以使用基于经验对属性值进行随机采样而构造新的人工样本,或者使用类似朴素贝叶斯方法假设各属性之间互相独立进行采样,这样便可得到更多的数据,但是无法保证属性之前的线性关系(如果本身是存在的)。
有一个系统的构造人工数据样本的方法SMOTE(Synthetic Minority Over-sampling Technique)。SMOTE是一种过采样算法,它构造新的小类样本而不是产生小类中已有的样本的副本,即该算法构造的数据是新样本,原数据集中不存在的。该基于距离度量选择小类别下两个或者更多的相似样本,然后选择其中一个样本,并随机选择一定数量的邻居样本对选择的那个样本的一个属性增加噪声,每次处理一个属性。这样就构造了更多的新生数据。具体可以参见原始论文。
这里有SMOTE算法的多个不同语言的实现版本:
- Python: UnbalancedDataset模块提供了SMOTE算法的多种不同实现版本,以及多种重采样算法。
- R: DMwR package。
- Weka: SMOTE supervised filter。
- 尝试不同的分类算法
强烈建议不要对待每一个分类都使用自己喜欢而熟悉的分类算法。应该使用不同的算法对其进行比较,因为不同的算法使用于不同的任务与数据。具体可以参见“Why you should be Spot-Checking Algorithms on your Machine Learning Problems”。
决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。目前流行的决策树算法有:C4.5、C5.0、CART和Random Forest等。基于R编写的决策树参见这里。基于Python的Scikit-learn的CART使用参见这里。 - 尝试对模型进行惩罚
你可以使用相同的分类算法,但是使用一个不同的角度,比如你的分类任务是识别那些小类,那么可以对分类器的小类样本数据增加权值,降低大类样本的权值(这种方法其实是产生了新的数据分布,即产生了新的数据集,译者注),从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。如penalized-SVM和penalized-LDA算法。
Weka中有一个惩罚模型的通用框架CostSensitiveClassifier,它能够对任何分类器进行封装,并且使用一个自定义的惩罚矩阵对分错的样本进行惩罚。
如果你锁定一个具体的算法时,并且无法通过使用重采样来解决不均衡性问题而得到较差的分类结果。这样你便可以使用惩罚模型来解决不平衡性问题。但是,设置惩罚矩阵是一个复杂的事,因此你需要根据你的任务尝试不同的惩罚矩阵,并选取一个较好的惩罚矩阵。 - 尝试一个新的角度理解问题
我们可以从不同于分类的角度去解决数据不均衡性问题,我们可以把那些小类的样本作为异常点(outliers),因此该问题便转化为异常点检测(anomaly detection)与变化趋势检测问题(change detection)。
异常点检测即是对那些罕见事件进行识别。如通过机器的部件的振动识别机器故障,又如通过系统调用序列识别恶意程序。这些事件相对于正常情况是很少见的。
变化趋势检测类似于异常点检测,不同在于其通过检测不寻常的变化趋势来识别。如通过观察用户模式或银行交易来检测用户行为的不寻常改变。
将小类样本作为异常点这种思维的转变,可以帮助考虑新的方法去分离或分类样本。这两种方法从不同的角度去思考,让你尝试新的方法去解决问题。 - 尝试创新
仔细对你的问题进行分析与挖掘,是否可以将你的问题划分成多个更小的问题,而这些小问题更容易解决。你可以从这篇文章In classification, how do you handle an unbalanced training set?中得到灵感。例如:
- 将你的大类压缩成小类;
- 使用One Class分类器(将小类作为异常点);
- 使用集成方式,训练多个分类器,然后联合这些分类器进行分类;
- ….
这些想法只是冰山一角,你可以想到更多的有趣的和有创意的想法去解决问题。更多的想法参加Reddit的文章http://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set。
选择某一种方法并使用它
你不必成为一个精通所有算法的算法奇才或者一个建立准确而可靠的处理数据不平衡的模型的统计学家,你只需要根据你的问题的实际情况从上述算法或方法中去选择一种或两种方法去使用。希望上述的某些方法能够解决你的问题。例如使用其它评价指标或重采样算法速度快并且有效。
总结
记住,其实并不知道哪种方法最适合你的任务与数据,你可以使用一些启发式规则或经验去选择某一个较优算法。当然最好的方法测试每一种算法,然后选择最好的方法。最重要的是,从点滴开始做起,根据自己现有的知识,并不断学习去一步步完善。
Further Reading…
这里有一些我认为有价值的可供参考的相关资料,让你进一步去认识与研究数据不平衡问题:
- 相关书籍
- 相关论文
Sergey Feldman的回答:
- 设超大类中样本的个数是极小类中样本个数的L倍,那么在随机梯度下降(SGD,stochastic gradient descent)算法中,每次遇到一个极小类中样本进行训练时,训练L次。
- 将大类中样本划分到L个聚类中,然后训练L个分类器,每个分类器使用大类中的一个簇与所有的小类样本进行训练得到。最后对这L个分类器采取少数服从多数对未知类别数据进行分类,如果是连续值(预测),那么采用平均值。
- 设小类中有N个样本。将大类聚类成N个簇,然后使用每个簇的中心组成大类中的N个样本,加上小类中所有的样本进行训练。
- 无论你使用前面的何种方法,都对某个或某些类进行了损害。为了不进行损害,那么可以使用全部的训练集采用多种分类方法分别建立分类器而得到多个分类器,采用投票的方式对未知类别的数据进行分类,如果是连续值(预测),那么采用平均值。
- 在最近的ICML论文中,表明增加数据量使得已知分布的训练集的误差增加了,即破坏了原有训练集的分布,从而可以提高分类器的性能。这篇论文与类别不平衡问题不相关,因为它隐式地使用数学方式增加数据而使得数据集大小不变。但是,我认为破坏原有的分布是有益的。
- More details than you need: imho, the most interesting of the corrupting distributions is the blankout distribution, where you just zero out a random subset of features. Why is it interesting? Because you are helping your classifier be sturdier/hardier by giving it variations of your data that have essentially missing features. So it has to learn to classify correctly even in adverse conditions. 一个相关的想法是,在神经网络中,随机选择部分隐藏层单元来继续训练(即,随机去掉一部分隐藏层单元,(zeroed-out))。具体见http://web.stanford.edu/~sidaw/cgi-bin/home/lib/exe/fetch.php?media=papers:fastdropout.pdf
Kripa Chettiar的回答:
- 增加新数据,可以使用SMOTE或SMOTEBoost产生人造数据。
- 将大类压缩。压缩比例需要具体情况具体分析,取决于你所拥有的数据。例如,A类中有30个样本,B类中有4000个样本,那么你可以将B类压缩成1000(进行采样)。
- 可以结合1与2
- 对于那种极小类是异常点的分类任务,因此分类器需要学习到大类的决策分界面,即分类器是一个单个类分类器(One Class Classifier)。Weka中有相关的库。
- 获得更多的数据。
Roar Nybø的回答:
- 对小类进行过采样。并且使用集成模式会获得更好的效果。
Dan Levin的回答:
- 一个很好的方法去处理非平衡数据问题,并且在理论上证明了。这个方法便是由Robert E. Schapire于1990年在Machine Learning提出的”The strength of weak learnability” ,该方法是一个boosting算法,它递归地训练三个弱学习器,然后将这三个弱学习器结合起形成一个强的学习器。我们可以使用这个算法的第一步去解决数据不平衡问题。
首先使用原始数据集训练第一个学习器L1。
然后使用50%在L1学习正确和50%学习错误的的那些样本训练得到学习器L2,即从L1中学习错误的样本集与学习正确的样本集中,循环一边采样一个。
接着,使用L1与L2不一致的那些样本去训练得到学习器L3。
最后,使用投票方式作为最后输出。
那么如何使用该算法来解决类别不平衡问题呢?
假设是一个二分类问题,大部分的样本都是true类。让L1输出始终为true。使用50%在L1分类正确的与50%分类错误的样本训练得到L2,即从L1中学习错误的样本集与学习正确的样本集中,循环一边采样一个。因此,L2的训练样本是平衡的。L使用L1与L2分类不一致的那些样本训练得到L3,即在L2中分类为false的那些样本。最后,结合这三个分类器,采用投票的方式来决定分类结果,因此只有当L2与L3都分类为false时,最终结果才为false,否则true。
自己已经在实践中使用过很多次,并且效果都不错。
Kaushik Kasi的回答:
- 对小类中的样本进行复制以增加该类中的样本数,但是可能会增加bias。
- 对小类中的样本通过调整特征值来人工生成样本,而使得该类中样本个数增多。如在图像中,对一幅图像进行扭曲得到另一幅图像,即改变了原图像的某些特征值。但是该方法可能会产生现实中并存在的样本。
Quora User的回答:
- 简单快速的方法:对大类欠采样或者对小类过采样。
- 更有效的方法:使用代价函数学习得到每个类的权值,大类的权值小,小类的权值大。刚开始,可以设置每个类别的权值与样本个数比例的倒数,然后可以使用过采样进行调优。
Dayvid Victor的回答:
在类别不平衡中,以下几个点需要注意:
- 常规的分类评价指标可能会失效,比如将所有的样本都分类成大类,那么准确率、精确率等都会很高。这种情况下,AUC时最好的评价指标。
- 你能够使用原型选择技术去降低不平衡水平。选择那些重要的样本。One-Sided Selection (OSS) 是一个预处理技术(模型训练之前使用),能够处理类别不平衡问题。
- 从另一个角度,可以增加小类的样本个数,可以使用过采样与原型生成技术(prototype-generation techniques)。
- 在K-Fold 校验中,每一份数据集中原则上应该保持类别样本比例一样或者近似,如果每份数据集中小类样本数目过少,那么应该降低K的值,知道小类样本的个数足够。
一般来说,如果事前不对不平衡问题进行处理,那么对于小类别的样本则会错误率很高,即大部分甚至全部小类样本都会分错。
Muktabh Mayank的回答:
- 这里有一个类似SVM的方法来处理不平衡问题。具体参见这里。
Sandeep Subramanian的回答:
- 使用SMOTE(Synthetic Minority Oversampling TEchnique)方法人工生成小类数据。其类似于最近邻算法。
Quora User的回答:
- 赋予小类样本更高的训练权值
- 对小类进行过采样
- 某些时候,高不平衡性下仍然可以得到效果较好的训练结果。我认为对于某些评价指标是有意义的,如AUC。
Sumit Soman 的回答:
- 如果你使用SVM分类器进行分类,那么可以使用Twin SVM(Twin Support Vector Machines for Pattern Classification),其能够应付类别不平衡问题。
Abhishek Ghose的回答:
原文:https://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set
- 相关书籍
更多相关内容 -
深度学习下的类别不平衡问题的调查.md
2021-11-23 14:15:05介绍了近年来的主流的深度学习方法,用于解决类别不平衡问题情况下的分类问题 -
分类中解决类别不平衡问题
2018-05-11 22:19:31在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,...关注微信公众号【Microstrong】,我现在研究方向是机器学习、深度学习,分享我在学习过程中的读书笔记!一起来学习,一起来交流,一起来进步吧!
分类中解决类别不平衡问题 - Microstrong的文章 - 知乎https://zhuanlan.zhihu.com/p/36381828
1.什么是类别不平衡问题
如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例。
类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,简称MvM)策略后产生的二分类任务扔可能出现类别不平衡现象,因此有必要了解类别不平衡性处理的基本方法。
2.解决类别不平衡问题
2.1欠采样方法
(1)什么是欠采样方法
直接对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。
(2)随机欠采样方法
随机欠采样顾名思义即从多数类
中随机选择一些样样本组成样本集
。然后将样本集
从
中移除。新的数据集
。
缺点:
随机欠采样方法通过改变多数类样本比例以达到修改样本分布的目的,从而使样本分布较为均衡,但是这也存在一些问题。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息。
为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能,出现了欠采样法代表性的算法EasyEnsemble和BalanceCascade算法。
(3)欠采样代表性算法-EasyEnsemble
算法步骤:
1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作
。
2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。
3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。
(4)欠采样代表性算法-BalanceCascade
BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:
1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。
2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。
3)最后,进入下一轮迭代中,继续降低多数类数量。
扩展阅读:
这篇论文提出了两种欠采样的方法:EasyEnsemble和BalanceCascade。
2.2过采样方法
(1)什么是过采样方法
对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。
(2)随机过采样方法
随机过采样是在少数类
中随机选择一些样本,然后通过复制所选择的样本生成样本集
,将它们添加到
中来扩大原始数据集从而得到新的少数类集合
。新的数据集
。
缺点:
对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。
为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE和Borderline-SMOTE算法。
(3)过采样代表性算法-SMOTE
SMOTE全称是Synthetic Minority Oversampling即合成少数类过采样技术。SMOTE算法是对随机过采样方法的一个改进算法,由于随机过采样方法是直接对少数类进行重采用,会使训练集中有很多重复的样本,容易造成产生的模型过拟合问题。而SOMT算法的基本思想是对每个少数类样本
,从它的最近邻中随机选择一个样本
(
是少数类中的一个样本),然后在
和
之间的连线上随机选择一点作为新合成的少数类样本。
SMOTE算法合成新少数类样本的算法描述如下:
1).对于少数类中的每一个样本
,以欧氏距离为标准计算它到少数类样本集
中所有样本的距离,得到其k近邻。
2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本
,从其k近邻中随机选择若干个样本,假设选择的是
。
3).对于每一个随机选出来的近邻
,分别与
按照如下公式构建新的样本。
我们用图文表达的方式,再来描述一下SMOTE算法。
1).先随机选定一个少数类样本
。
2).找出这个少数类样本
的K个近邻(假设K=5),5个近邻已经被圈出。
3).随机从这K个近邻中选出一个样本
(用绿色圈出来了)。
4).在少数类样本
和被选中的这个近邻样本
之间的连线上,随机找一点。这个点就是人工合成的新的样本点(绿色正号标出)。
SMOTE算法摒弃了随机过采样复制样本的做法,可以防止随机过采样中容易过拟合的问题,实践证明此方法可以提高分类器的性能。但是SMOTE算法也存以下两个缺点:
1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题。
2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大。
解释缺点2)的原因:结合前面所述的SMOTE算法的原理,SMOTE算法产生新的人工少数类样本过程中,只是简单的在同类近邻之间插值,并没有考虑少数类样本周围多数类样本的分布情况。如3图所示,绿色正号1、2分布在多数类样本周围,它们离多数类样本最近,这就导致它们有可能被划分成多数类样本。因此从3图中可以看出,SMOTE算法的样本生成机制存在一定的盲目性。
为了克服以上两点的限制,多种不同的自适应抽样方法相继被提出,其中具有代表性的算法包括Borderline-SMOTE算法。
扩展阅读:
这篇论文提出了SMOTE算法。
(4)Borderline-SMOTE算法介绍
对于Borderline-SMOTE算法最感兴趣的就是用于识别少数类种子样本的方法。在Borderline-SMOTE算法中,识别少数类种子样本的过程如下:
1)首先,对于每个
,确定一系列最近邻样本集,成该数据集为
,且
。
2)然后,对每个样本
,判断出最近邻样本集中属于多数类样本的个数,即:
。
3)最后,选择满足下面不等式的
。
上面式子表明,只有最近邻样本集中多数类多于少数类的那些
才会被选中形成“危险集”(DANGER)。因此,DANGER集中的样本代表少数类样本的边界(最容易被错分的样本)。然后对DANGER集中使用SMOTE算法在边界附近产生人工合成少数类样本。
我们可以看出,如果
。 即:
的所有k个最近邻样本都属于多类。如4图所示的样本点C,我们就认为样本点C是噪声且它不能生成合成样本。
通过上面的介绍,我们对Borderline-SMOTE算法有了一定的了解。为了让大家理解的更透彻这个算法,我再给大家画一个流程图,详细介绍一下。
流程图5中,训练样本集为F,少数类样本
。
1)步骤一:
(i)计算少数类样本集
中每一个样本在训练集F中的k个最近邻。
(ii)然后,根据这k个最近邻对
中的样本进行归类:
- 假设这k个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在
集合中。
- 反正k个最近邻都是少数类样本则该样本是远离分类边界的,将其放入S集合中。
- 最后,K个最近邻即有多数类样本又有少数类样本,则认为是边界样本,放入B集合中。
2)步骤二:
(i)设边界样本集
,计算B集合中的每一个样本
,在少数类样本集
中的K个最近邻,组成集合
。
(ii)随机选出s(1<s<n)个最近邻。
(iii)计算出它们各自与该样本之间的全部属性的差值
。
。
(iv)然后乘以一个随机数
。如果
是
集合或S集合中的样本,则
。
(v)最后生成的人工少数类样本为:
。
3)步骤三:
重复步骤2的过程,直到生成人工少数类样本的数目满足要求,达到均衡样本集的目的后结束算法。
扩展阅读:
这篇文章提出了Borderline-SMOTE算法。
2.3代价敏感学习(cost-sensitive learning)
(1)代价矩阵
采样算法从数据层面解决不平衡数据的学习问题;在算法层面上解决不平衡数据学习的方法主要是基于代价敏感学习算法(Cost-Sensitive Learning)。
在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但是后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故;在信用卡盗用检查中,将正常使用误认为是盗用,可能会使用户体验不佳,但是将盗用误认为是正常使用,会使用户承受巨大的损失。为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。
代价敏感学习方法的核心要素是代价矩阵,如表1所示。其中
表示将第
类样本预测为第
类样本的代价。一般来说,
;若将第0类判别为第1类所造成的损失更大,则
;损失程度相差越大,
的值差别越大。当
相等时为代价不敏感的学习问题。
表1:代价矩阵
(2)代价敏感学习方法
基于以上代价敏感矩阵的分析,代价敏感学习方法主要有以下三种实现方式,分别是:
1).从学习模型出发,对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对不同的学习模型如感知机、支持向量机、决策树、神经网络等分别提出了其代价敏感的版本。以代价敏感的决策树为例,可以从三个方面对其进行改造以适应不平衡数据的学习,这三个方面分别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面都可以将代价矩阵引入。
2).从贝叶斯风险理论出发,把代价敏感学习看成是分类结果的一种后处理,按照传统方法学习到一个模型,以实现损失最小为目标对结果进行调整,优化公式如下所示。此方法的优点在于它可以不依赖所用的具体分类器,但是缺点也很明显,它要求分类器输出值为概率。
3).从预处理的角度出发,将代价用于权重调整,使得分类器满足代价敏感的特性,下面讲解一种基于Adaboost的权重更新策略AdaCost算法。
(3)AdaCost算法
要想了解AdaCost算法,我们得先知道Adaboost算法,如图6所示。Adaboost算法通过反复迭代,每一轮迭代学习到一个分类器,并根据当前分类器的表现更新样本的权重,如图中红框所示,其更新策略为正确分类样本权重降低,错误分类样本权重增大,最终的模型是多次迭代模型的一个加权线性组合。分类越准确的分类器将会获得越大的权重。
AdaCost算法修改了Adaboost算法的权重更新策略,其基本思想是对代价高的误分类样本大大地提高其权重,而对于代价高的正确分类样本适当地降低其权重,使其权重降低相对较小。总体思想是代价高样本权重增加得大降低的慢。其样本权重按照如下公式进行更新。其中
分别表示样本被正确和错误分类情况下的
的取值。
2.4不平衡学习的评价方法
(1)F1度量
这一部分涉及到模型的评价方法,如果你还没有学习过,可以看我的公众号之前发的关于这部分文章。同时,我也把链接地址贴出来,供大家快速学习。
【错误率、精度、查准率、查全率和F1度量】详细介绍
ROC曲线和AUC面积理解
表2:分类结果混淆矩阵例如在癌症预测的场景中,假设没有患癌症的样本为正例,患癌症的样本为反例,反例占的比例很少(大概0.1%),如果直接把分类器设置为预测都是正例,那么精度和查准率的值都是99.9%。可见精度、错误率和查准率都不能表示不平衡数据下的模型表现。而F1值则同时考虑了少数类的查准率和召回率,因此能衡量不平衡数据下模型的表现。
(2)G-Mean
G-Mean是另外一个指标,也能评价不平衡数据的模型表现,其计算公式如下。
(3)ROC曲线和AUC面积
我的这篇文章把ROC曲线和AUC面积分析的全面。ROC曲线和AUC面积可以很好的评价不平衡数据的模型表现。
ROC曲线和AUC面积理解
3.如何选择
(1)在正负样本都非常少的情况下,应该采用数据合成的方式,例如:SMOTE算法和Borderline-SMOTE算法。
(2)在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样的方法或者是加权的方法。
总结:
本文主要介绍了分类中类别不均衡时学习中常用的算法及评价指标,算法主要从数据和模型两个层面介绍,数据层面的算法主要关于过采样和欠采样以及改进的算法,模型方面主要讲解了基于代价的敏感学习。评价指标主要讲解了F1度量、G-Mean和ROC曲线AUC面积。
Reference:
(1)Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.
(2)Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.
(3)Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.
(4)EasyEnsemble和BalanceCascade论文下载地址:https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tsmcb09.pdf
(5)SMOTE算法期刊页面:https://www.jair.org/index.php/jair/article/view/10302
(6)SMOTE算法论文下载地址:https://www.jair.org/index.php/jair/article/view/10302/24590
(7)Borderline-SMOTE算法论文下载地址:http://sci2s.ugr.es/keel/keel-dataset/pdfs/2005-Han-LNCS.pdfhttp://
(8)不均衡学习的抽样方法 - CSDN博客https://blog.csdn.net/u011414200/article/details/50664266
(9)不平衡数据下的机器学习方法简介https://www.jianshu.com/p/3e8b9f2764c8
(10)非平衡分类问题 | BalanceCascade方法及其Python实现https://zhuanlan.zhihu.com/p/36093594
- 假设这k个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在
-
解决类别不平衡问题的方法综述
2020-06-13 17:08:47样本不平衡怎样解决(在loss前加系数) 数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果。因为实际...一、数据不平衡
1.1 什么是数据不平衡
在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果。因为实际数据往往分布得很不均匀,都会存在“长尾现象”,也就是所谓的“二八原理”。
以二分类问题为例,假设正类的样本数量远大于负类的样本数量,通常情况下把样本类别比例超过4:1(也有说3:1)的数据就可以称为不平衡数据。
不平衡程度相同(即正负样本比例类似)的两个问题,解决的难易程度也可能不同,因为问题难易程度还取决于数据量。可以把问题根据难度从小到大排个序:大数据+分布均衡<大数据+分布不均衡<小数据+数据均衡<小数据+数据不均衡。
1.2 数据不平衡会产生什么问题
样本不平衡会使得我们的分类模型存在很严重的偏向性,但是从一些常用的指标上又无法看出来。举一个极端一点的例子,如果正负样本比例为100:1,那岂不是把全部样本都判定为正样本就有99%+的分类准确率了。从测试结果上来看,就表现为有太多的False Positive。
二、解决方法
在机器学习中,处理样本不平衡问题,主要有3种策略:从数据角度、从算法层面和模型评价层面。
从数据角度出发,通常的方法包括了:2.1 采样
采样方法是通过对训练集进行处理使其从不平衡的数据集变成平衡的数据集,在大部分情况下会对最终的结果带来提升。采样分为过采样和欠采样。这种方法最大的优点是简单。
过采样
过采样是把小众类复制多份。
过采样后的数据集中会反复出现一些样本,训练出来的模型会有一定的过拟合。
过采样会把小众样本复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效。
欠采样
欠采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。
欠采样的缺点是最终的训练集丢失了数据,模型只学到了总体模式的一部分。丢弃大量数据,和过采样一样会存在过拟合的问题。
因为欠采样会丢失信息,如何减少信息的损失呢?
第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次欠采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果。
第二种方法叫做BalanceCascade,利用增量训练的思想(Boosting):先通过一次欠采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本欠采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。
第三种方法是利用KNN试图挑选那些最具代表性的大众样本,叫做NearMiss,这类方法本质上是一种原型选择(prototype selection)方法,即从多数类样本中选取最具代表性的样本用于训练,计算量很大。
还可以采用聚类的方法,假设少数类样本数量为N,那就将多数类样本分为N个簇,取每个簇的中心点作为多数类的新样本,再加上少数类的所有样本进行训练。这样就可以保证了多数类样本在特征空间的分布特性。
还可以通过某种规则来清洗重叠的数据,从而达到欠采样的目的,而这些规则往往也是启发性的。如Tomek Link和Edited Nearest Neighbours(ENN)。这种数据清洗方法最大的缺点是无法控制欠采样的数量。
2.2 数据合成
数据合成方法是利用已有样本生成更多样本,其实也可以归类于过采样方法,这类方法在小数据场景下有很多成功案例,比如医学图像分析等。
现在的主流过采样方法就是通过某种方式人工合成一些少数类样本,从而达到类别平衡的目的,而这其中的鼻祖就是SMOTE。
SMOTE (synthetic minority oversampling technique) 的思想概括起来就是在少数类样本之间进行插值来产生额外的样本。具体地,对于一个少数类样本 x i x_i xi使用K近邻法(k值需要提前指定),求出离 x i x_i xi距离最近的k个少数类样本,其中距离定义为样本之间n维特征空间的欧氏距离。然后从k个近邻点中随机选取一个,使用下列公式生成新样本:
x n e w = x i + ( x ^ i − x i ) × δ x_{new}=x_i+(\hat x_i−x_i)×δ xnew=xi+(x^i−xi)×δ
其中 x ^ i \hat x_i x^i为选出的k近邻点, δ ∈ [ 0 , 1 ] δ∈[0,1] δ∈[0,1]是一个随机数。下图就是一个SMOTE生成样本的例子,使用的是3-近邻,可以看出SMOTE生成的样本一般就在 x i x_i xi和 x ^ i \hat x_i x^i相连的直线上:
SMOTE为每个小众样本合成相同数量的新样本,这带来一些潜在的问题:一方面是增加了类之间重叠的可能性,另一方面是生成一些没有提供有益信息的样本。为了解决这个问题,出现两种方法:Borderline-SMOTE与ADASYN。Borderline-SMOTE的解决思路是寻找那些应该为之合成新样本的小众样本。即为每个小众样本计算K近邻,只为那些K近邻中有一半以上大众样本的小众样本生成新样本。直观地讲,只为那些周围大部分是大众样本的小众样本生成新样本,因为这些样本往往是边界样本。确定了为哪些小众样本生成新样本后再利用SMOTE生成新样本。
ADASYN名为自适应合成抽样(adaptive synthetic sampling),其最大的特点是根据数据分布情况自动决定不同少数类样本需要产生多少不同数量的合成样本,而不是像SMOTE那样对每个少数类样本合成同数量的样本。
其流程为:首先计算需要合成的样本总量G,然后对于每个少类别样本xi,找出其K近邻个点,并计算分布比例 Γ Γ Γ,最后对每个少类别样本xi计算需要合成的样本数量gi,再用SMOTE算法合成新样本。2.2.1 文本数据的合成
后文中的focal loss 方法,针对像深度神经网络这些复杂的模型,具有很好的使用价值,但是针对传统分类器,小样本集情况下,实施有一定的难度。而简单过采样和欠采样对与文本分类问题效果几乎为0。
对于文本数据,可以采用文本生成的方式,解决文本样本不均衡的问题。首先分析样本数少的类别,通过文本句法依赖分析,文本词性标记分析词的相关属性,然后采用同义词替换的方式生成新的文本。实验结果证明,方法简单有效。
还可以进行一些句子顺序打乱以及句内词序打乱的操作进行小类的数据增强。 将数据增强结合过采样是比较直观有效的做法。
2.2.2 图像数据的合成
属于图像数据增强范畴,包括图像翻转、平移、旋转、缩放,分离单个r、g、b三个颜色通道以及添加噪声等等。
2.3 加权
我们还可以通过加权的方式来解决数据不平衡的问题,即对不同类别分错的代价不同,在训练分类器时,为少数类样本赋予更大的权值,为多数类样本赋予较小的权值。
这种方法的难点在于设置合理的权重,实际应用中一般让各个分类间的加权损失值近似相等。当然这并不是通用法则,还是需要具体问题具体分析。
2.4 改变模型评价
2.4.1 选择合适的评估方式
准确度这个评价指标在类别不均衡的分类任务中并不能work,甚至进行误导(分类器不work,但是从这个指标来看,该分类器有着很好的评价指标得分)。
对于极端的类别不平衡的评估问题,我们一般用的指标有(前面是全局评估,最后一个是点评估):
- 混淆矩阵
- Precision和Recall
- F1得分
- Kappa(Cohen kappa)
- ROC曲线和AUC
- mean Average Precesion(mAP),指的是在不同召回下的最大精确度的平均值
- Precision@Rank k。假设共有n个点,假设其中k个点是少数样本时的Precision。这个评估方法在推荐系统中也常常会用。
选择哪个评估标准需要取决于具体问题。
2.4.2 调整阈值
大部分模型的默认阈值为输出值的中位数,如逻辑回归的输出范围为[0,1],当某个样本的输出大于0.5就会被划分为正例,反之为反例。当类别不平衡时,采用默认的分类阈值可能会导致输出全部为反例,产生虚高的准确度,导致分类失败。因此,可以选择调整阈值,使得模型对于较少的类别更为敏感。
2.4.3 改变损失函数(OHEM和Focal loss)
以下两个方法最开始适用于图像上,但是NLP领域也可以借鉴。
OHEM
OHEM(online hard example miniing)算法的核心思想是根据输入样本的损失进行筛选,筛选出hard example,表示对分类和检测影响较大的样本,然后将筛选得到的这些样本应用在随机梯度下降中训练。在实际操作中是将原来的一个ROI Network扩充为两个ROI Network,这两个ROI Network共享参数。其中前面一个ROI Network只有前向操作,主要用于计算损失;后面一个ROI Network包括前向和后向操作,以hard example作为输入,计算损失并回传梯度。
算法优点:1、对于数据的类别不平衡问题不需要采用设置正负样本比例的方式来解决,这种在线选择方式针对性更强。2、随着数据集的增大,算法的提升更加明显(作者是通过在COCO数据集上做实验和VOC数据集做对比,因为前者的数据集更大,而且提升更明显,所以有这个结论)。
Focal loss
Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。主旨是:ssd按照ohem选出了loss较大的,但忽略了那些loss较小的easy的负样本,虽然这些easy负样本loss很小,但数量多,加起来的loss较大,对最终loss有一定贡献。作者想把这些loss较小的也融入到loss计算中。但如果直接计算所有的loss,loss会被那些easy的负样本主导,因为数量太多,加起来的loss就大了。也就是说,作者是想融入一些easy example,希望他们能有助于训练,但又不希望他们主导loss。这个时候就用了公式进行衰减那些easy example,让他们对loss做贡献,但又不至于主导loss,并且通过balanced crossentropy平衡类别。
OHEM是只取3:1的负样本去计算loss,之外的负样本权重置零,而focal loss取了所有负样本,根据难度给了不同的权重。
focal loss相比OHEM的提升点在于,3:1的比例比较粗暴,那些有些难度的负样本可能游离于3:1之外。之前实验中曾经调整过OHEM这个比例,发现是有好处的,现在可以试试focal loss了。
可以参考本人的另一篇博文:论文笔记:Focal Loss for Dense Object Detection
2.5 一分类/无监督/半监督
对于正负样本极不平衡的场景,我们可以换一个完全不同的角度来看待问题:把它看做一分类(One Class Learning)或异常检测(Novelty Detection)问题或变化趋势检测问题。
一分类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作包括One-class SVM等。
异常检测指的是从数据中找到那些异常值,比如你案例中的“广告”。无监督的异常检测一般依赖于对于数据的假设,比如广告和正常的文章内容很不相同,那么一种假设是广告和正常文章间的欧式距离很大。无监督异常检测最大优势就是在于不需要数据标签,如果在对数据假设正确时效果甚至可以比监督学习更好,尤其是当获取标签成本很高时。
变化趋势检测类似于异常点检测,不同在于其通过检测不寻常的变化趋势来识别。如通过观察用户模式或银行交易来检测用户行为的不寻常改变。
此外还可以尝试半监督异常集成学习,简单而言,可以现在原始数据集上使用多个无监督异常方法来抽取数据的表示,并和原始的数据结合作为新的特征空间。在新的特征空间上使用集成树模型,比如xgboost,来进行监督学习。无监督异常检测的目的是提高原始数据的表达,监督集成树的目的是降低数据不平衡对于最终预测结果的影响。这个方法还可以和主动学习结合起来,进一步提升系统的性能。当然,这个方法最大的问题是运算开销比较大,需要进行深度优化。具体做法可以参考:
Zhao, Y.; Hryniewicki, M.K. XGBOD: Improving Supervised Outlier Detection with Unsupervised Representation Learning. In Proceedings of the International Joint Conference on Neural Networks (IJCNN), Rio, Brazil, 8–13 July 2018.
2.5.1 不平衡文本数据的半监督
高维数据上的半监督异常检测:考虑到文本文件在转化后往往维度很高,可以尝试一下最近的一篇KDD文章,主要是找到高维数据在低维空间上的表示,以帮助基于距离的异常检测方法。文章如下:
Pang, G., Cao, L., Chen, L. and Liu, H., 2018. Learning Representations of Ultrahigh-dimensional Data for Random Distance-based Outlier Detection. arXiv preprint arXiv:1806.04808.
三、如何选择
如何根据实际问题选择合适的方法呢?接下来谈谈一些我的经验。
1、在正负样本都非常之少的情况下,应该采用数据合成的方式;
2、在负样本足够多,正样本非常之少且比例及其悬殊的情况下,应该考虑一分类方法;
3、在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样或者加权的方法。
4、采样和加权在数学上是等价的,但实际应用中效果却有差别。尤其是采样了诸如Random Forest等分类方法,训练过程会对训练集进行随机采样。在这种情况下,如果计算资源允许过采样往往要比加权好一些。
5、另外,虽然过采样和欠采样都可以使数据集变得平衡,并且在数据足够多的情况下等价,但两者也是有区别的。实际应用中,我的经验是如果计算资源足够且小众类样本足够多的情况下使用过采样,否则使用欠采样,因为过采样会增加训练集的大小进而增加训练时间,同时小的训练集非常容易产生过拟合。
6、对于欠采样,如果计算资源相对较多且有良好的并行环境,应该选择Ensemble方法。
四、总结
1、怎样解决样本不平衡问题:
主要三个方面,数据,模型和评估方法。
从数据的角度出发,通常的方法包括:
- 扩充数据集
- 过采样
- 欠采样
- 数据合成
- 基于异常检测的方式
从算法的角度出发,通常的方法包括:
-
尝试不同的分类算法
决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。
-
对小类错分进行加权惩罚
如penalized-SVM和penalized-LDA算法。
-
从重构分类器的角度出发
仔细对你的问题进行分析与挖掘,是否可以将你的问题划分成多个更小的问题,而这些小问题更容易解决。你可以从这篇文章In classification, how do you handle an unbalanced training set?中得到灵感。例如:
- 将你的大类压缩成小类
- 使用One Class分类器(将小类作为异常点)
- 使用集成方式,训练多个分类器,然后联合这些分类器进行分类
- 将二分类问题改成多分类问题
从评估的角度出发,通常的方法包括:
- 选择合适的评估指标
- 选择合适的损失函数
- 选择合适的阈值
- 设置不同类别的权重
2、经验:
参考网址:
【小夕精选】如何优雅而时髦的解决不均衡分类问题 - 夕小瑶的卖萌屋
怎样解决样本不平衡问题?(较全,有经验总结)
聊一聊深度学习中的样本不平衡问题
机器学习之类别不平衡问题 (3) —— 采样方法(详细讲了多种过采样和欠采样的方法,并对比了效果)
欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响? - 微调的回答 - 知乎(含部分方法在不同数据集上的实验结果) -
类别不平衡问题 —— 各种评估指标
2019-05-10 20:55:26类别不平衡问题 在二分类问题中,通常假设正负类别相对均衡(混淆矩阵),然而实际应用中类别不平衡的问题,如100, 1000, 10000倍的数据偏斜是非常常见的,比如疾病检测中未患病的人数远超患病的人数,产品质量检测...类别不平衡问题
在二分类问题中,通常假设正负类别相对均衡(混淆矩阵),然而实际应用中类别不平衡的问题,如100, 1000, 10000倍的数据偏斜是非常常见的,比如疾病检测中未患病的人数远超患病的人数,产品质量检测中合格产品数量远超不合格产品等。在检测信用卡欺诈问题中,同样正例的数目稀少,而且正例的数量会随着时间和地点的改变而不断变化,分类器要想在不断变化的正负样本中达到好的检测效果是非常困难的。
由于类别不平衡问题的特性使然,一般常使用于评估分类器性能的准确率和错误率可能就不再适用了。因为在类别不平衡问题中我们主要关心数目少的那一类能否被正确分类,而如果分类器将所有样例都划分为数目多的那一类,就能轻松达到很高的准确率,但实际上该分类器并没有任何效果。
True Positive (真正例,TP):实际为正例,预测为正例。
False Negative (假负例,FN):实际为正例,预测为负例。
True Negative (真负例,TN):实际为负例,预测为负例。
False Positive (假正例,FP):实际为负例,预测为正例。
F1 score =
F1 score 是一个综合指标,为Precision和Recall的调和平均 (harmonic mean),数值上一般接近于二者中的较小值
因此如果F1 score比较高的话,意味着Precision和Recall都较高。
-
分类中常见的类别不平衡问题解决方法
2017-08-29 11:01:32常见的类别不平衡问题解决方法 通常的分类学习方法中都有一个共同的假设,即不同类别的训练样例数目相同。如果不同类别的训练样例数目稍有差别,通常对分类影响不大,但是若差别很大,则会对学习造成影响,测试结果... -
数据集类别不平衡问题
2020-09-15 20:12:32类别不平衡问题: 类别不平衡问题指分类任务中不同类别的训练样本数目差别很大的情况。一般来说,不平衡样本会导致训练模型侧重样本数目较多的类别,而“轻视”样本数目较少类别,这样模型在测试数据上的泛化能力就... -
通过互信息思想来缓解类别不平衡问题
2020-07-27 19:30:21©PaperWeekly 原创 ·作者|苏剑林学校|追一科技研究方向|NLP、神经网络类别不平衡问题,也叫“长尾问题”,是机器学习面临的常见问题之一,尤其是来源于真实场景下的数据集,几... -
类别不平衡问题全面总结
2021-01-14 17:14:12类别不平衡问题(class-imbalance)是什么指分类任务中不同类别的训练样例数目差别很大的情况若不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有... -
分类中解决数据类别不平衡问题的方案
2020-04-08 20:24:10分类中解决类别不平衡问题 在现实环境中,采集的数据(建模样本)往往是比例失衡的。比如网贷数据,逾期人数的比例是极低的(千分之几的比例);奢侈品消费人群鉴定等。 1 类别不平衡数据集基本介绍 在该博客中,... -
[深度学习技巧]·数据类别不平衡问题处理
2019-03-11 14:03:39数据类别不平衡问题处理 转载地址 1.什么是类别不平衡问题 如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要... -
类别不平衡问题的解决方法:过采样、欠采样和再平衡
2019-01-31 13:55:18类别不平衡问题: 指的是在分类任务中不同类别的训练样本数目差异很大的问题。 我们简单举一个例子:如果我们要判断一名大学生究竟是研究生还是本科生,我们已知在大学中本科生的数量会远远高于研究生的数量,我们... -
分类中解决类别不平衡问题?(解决样本不平衡的问题?)
2020-04-13 11:28:58在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,... -
机器学习(三)类别不平衡问题
2020-04-07 16:02:00类别不平衡问题 1. Threshold-moving 2. Over-sampling 3. Under-sampling 4. 加权损失函数 前言: 之前所说的分类学习方法都是基于训练样本比例... -
标签稀疏类别不平衡问题解决方案总结
2020-12-19 11:48:30比如在金融反欺诈中,欺诈交易的应该是很少部分,绝大部分交易是正常的,这就是一个正常的类别不平衡问题,假设数据集中有99个正例样本,1个负例样本。在不考虑样本不平衡的很多情况下,学习算法会使分类器放弃负例... -
深度学习中处理类别不平衡问题主流方法总结
2018-12-18 11:08:56在深度学习的一些场景下,经常会出现类别不平衡的情况。以二分类为例,正负样本比例为1:1的情况十分罕见;多数情况下都是1:N,N有时甚至超过10,甚至几十上百都有。在多次遇到这种问题后写了该博客进行总结。 方法 1... -
关于pytorch处理类别不平衡的问题
2020-12-23 11:03:16所以采用欠采样来缓解类别不平衡的问题。 下面的代码展示了如何使用WeightedRandomSampler来完成抽样。 numDataPoints = 1000 data_dim = 5 bs = 100 # Create dummy data with class imbalance 9 to 1 data = ... -
常见的类别不平衡问题解决方法
2019-04-28 14:58:511.对大类数据降采样 减少大类数据样本个数,使与小样本个数接近。 缺点 :欠采样操作时若随机丢弃大类样本,可能会...6.尝试不同的算法,尤其是决策树类(对不平衡数据表现不错),还有就是集成方法 -
机器学习之类别不平衡问题 (2) —— ROC和PR曲线
2018-03-17 19:14:03机器学习之类别不平衡问题 (1) —— 各种评估指标 机器学习之类别不平衡问题 (2) —— ROC和PR曲线 完整代码 ROC曲线和PR(Precision - Recall)曲线皆为类别不平衡问题中常用的评估方法,二者既有相同也有... -
类别不平衡问题之SMOTE算法(Python imblearn极简实现)
2021-01-14 17:14:10类别不平衡问题类别不平衡问题,顾名思义,即数据集中存在某一类样本,其数量远多于或远少于其他类样本,从而导致一些机器学习模型失效的问题。例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问题... -
分类中的类别不平衡问题
2018-03-06 21:05:341.怎样算类别不平衡?不知道谁说:相差一点没多大影响,训练集和测试集相差超过4:1时。我的实验结果:相差一点有一点影响。 -
Python imblearn 解决 类别不平衡问题
2019-11-12 13:05:46例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问题中,因为绝大多数样本都为正常样本,欺诈样本很少,逻辑回归算法会倾向于把大多数样本判定为正常样本,这样能达到很高的准确率,但是达不到很高... -
分类问题中类别不平衡问题的有效解决方法
2019-04-14 14:13:51在LGBM的文档中,可以看到有两个参数来处理类别不平衡,分别是is_unbalance和scale_pos_weight 。 在上图中的介绍中,这2个参数只能选其一,不能同时选。这说明了什么呢?这2个参数肯定是起到了相同的作用。这2个... -
机器学习之类别不平衡问题 (3) —— 采样方法
2019-04-26 09:47:12前两篇主要谈类别不平衡问题的评估方法,重心放在各类评估指标以及ROC和PR曲线上,只有在明确了这些后,我们才能据此选择具体的处理类别不平衡问题的方法。本篇介绍的采样方法是其中比较常用的方法,其主要目的是... -
深入理解机器学习——类别不平衡学习(Imbalanced Learning):影响因素
2022-05-02 15:13:33如《类别不平衡分布对传统分类器性能的影响机理》所述,在不平衡分类问题中,类别不平衡比率(Imbalanced Ratio, IR)是一个较为重要的概念,其具体可表示为多数类样本数与少数类样本数的比值,即IR=N−N+\text{IR}=... -
《西瓜书》笔记03:多分类学习和类别不平衡问题(3)
2017-08-17 11:36:30假设N个类别。基本思路:拆解法。将多分类任务拆分为若干个二分类任务。为每个二分类任务训练一个分类器;测试时,对这些分类器的结果进行集成获得最终结果。关键问题:如何拆分?如何集成?经典策略: 一对一(one ... -
SVM 解决类别不平衡问题(scikit_learn)
2018-02-18 10:10:34解决数据类别不平衡的一个方法就是使用基于类别增加权重的CCC值 Cj=C∗wjCj=C∗wjC_j = C * w_j 其中,CCC是误分类的惩罚项,wjwjw_j是与类别 jjj 的出现频率成反比的权重参数,CjCjC_j 就是类别 jjj 对应的 ... -
数据挖掘随笔:数据集类别不平衡问题
2018-05-23 23:40:06在处理分类问题时,数据集可能会存在类不平衡问题,如在某冰箱厂家生产的10000台冰箱中,有9900台为合格产品,而剩余的100台为不合格产品。在这种情境下,即使采用将全部样本分类为正类的分类器也可以得到99%的准确... -
训练-测试数据类别不平衡和交叉熵(Quora question pair challenge中的类别不平衡问题)
2018-12-24 19:33:22假设我们想要在一个二分类问题上训练一个机器学习模型, 一个标准的度量模型性能的方法叫做log-loss或binary cross-entropy. 这意味着对于给定的预测标签y的任务, 我们想要得到概率y^\hat{y}y^,而不是仅仅输出一个0...