如何解决机器学习 数据极不平衡中数据不平衡问题

数据不平衡问题【机器学习吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:9,555贴子:
数据不平衡问题收藏
我有一堆不平衡数据,正样本(标签为0):负样本(标签为1)=7:1左右,现在我想提高对标签为1的预测的精确率,有什么好的方法吗?就是把0.38适当提高,0.95适当降低。我用的随机森林
百度众包平台机器学习提供专业训练数据服务,用采集,标注方式为您提供高质量训练数据!同时提供基于百度机器学习算法库的实用行业大数据解决方案!机器模型训练,就找百度众包
大神们有啥疑问加我qq:
有 ,,偿,,,啊,,,求联系,,求联系,,,工硕实验,,,,
登录百度帐号推荐应用本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载
作者:TOM FAWCETT
编译:机器之心
参与:孙睿、吴攀、李亚洲
原文链接:
本文作者 Tom Fawcett 在机器学习和数据挖掘的实践应用上已有 20 多年的研究历史,曾就职于 Verizon 和惠普实验室(HP Labs)等机构,也曾在斯坦福大学语言和信息的研究中心从事过研究工作;现任 Silicon Valley Data Science 首席数据科学家兼 Machine Learning Journal 编辑,著有《Data Science for Business》一书。文中提到的论文可点击「阅读原文」下载。
如果你是机器学习课程的新手,那么你使用过的数据库很大程度上都是非常简单的。其中一个原因就是,当你构建分类器时,样本类都是平衡的——也就是说,每个类中的样本数量是大致相同的。在教学中,数据库通常是净化过的,这样老师才能够把注意力集中在教授特定算法或技巧上,而不被其它问题干扰。一般情况下,你遇到的样本类似下方的二维图表,其中的点代表样本、点的不同颜色(或形状)代表类:
分类算法的目标是尝试学习出一个能够分辨二者的分离器(分类器)。根据不同的数学、统计或几何假设,达成这一目标的方法很多:
然而,当你开始面对真实的、未加工过的数据时,你会马上注意到,这些数据要嘈杂且不平衡得多。真实数据的散点图看起来更像是这样的:
最主要的问题是这些类是不平衡的:蓝点的数量远超红点。
对于不平衡类的研究通常认为「不平衡」意味着少数类只占 10% 到 20% 。而在现实中,数据库甚至能够比上面的例子更加不平衡。以下是一些例子:
每年,约 2% 的信用卡账户是伪造的 [1]。(多数的欺诈检测领域是极其不平衡的)
针对某一病征的医学筛查通常涵盖了许多没有此病征的人,以检查出少数患者(例:美国的 HIV 感染率约为 0.4%)
每年,硬盘驱动器故障的发生率约为 1%
在线广告的转化率在 10^-3 到 10^-6 的范围区间内
工厂的产品缺陷率一般在 0.1% 左右
以上的许多领域都是不平衡的,因为它们是被我称为「大海捞针问题」的那一类。在这种情况中,机器学习分类器要从庞大的负面(不相关)样本中,寻找少量的正面(相关的、值得注意的)样本。
当你遇到类似的问题时,使用传统的算法将会面临困难。传统的算法通常是偏向数量占优的类,因为它们的损失函数会试图最优化相关数量,例如错误率,而没有将数据分布纳入考虑范围内。[2]在最坏的情况中,少数类样本会被视为多数类的异常点而被忽略,然后学习算法将生成一个简单的分类器,并将所有样本分类到多数类下。
这看起来像是一种不正常的行为,但它真的不是。事实上,如果你的目标是最大化精确度(也可以说,最小化错误率),这是一个完全可以接受的解决方案。但是,如果我们假设那极其少量的类的样本更需要被分类,那么我们不得不更将谨慎,并采取更复杂的方法来解决问题。
如果你正在被这样的问题困扰,并希望得到实用的解决建议,往下看。
注:这篇博文的重点是提供解决此类问题的实用建议。然而,这并不是一个手把手教你的代码教程。我的 Jupyter Notebooks (https://silicon-valley-data-science.github.io/learning-from-imbalanced-classes/ImbalancedClasses.html )中有我测试这些想法的记录,但在这篇文章中,我将只解释一些基本的想法和原则。
处理不平衡的数据
从不平衡数据中学习,是一项已被研究了 20 年之久的问题。它曾是许多论文、研讨会、特别议程的主题(一项最近的调查就有大约 220 个引用)。人们尝试了许多方法,但结果各不相同,所以至今没有得到明晰的答案。当数据科学家们第一次遇到这个问题,他们往往会问:「如果我的数据是不平衡的,我该怎么做?」而这一问题是没有固定答案的,就像你问「哪个学习算法是最好的」一样:答案取决于数据。
由此,我列出了一些方法的大致总结,它们是以困难程度排序的:
什么也不做。有时好运就这样降临在你的头上:你什么都不需要做。你可以使用所谓的自然(或分层)分布来进行训练,有时不需任何修改就能正常运行。
通过某些方法使得数据更加平衡:
对少数类进行过采样
对多数类进行欠采样
合成新的少数类
舍弃所有少数类,切换成一个异常检测框架。
在算法层面之上(或之后):
调整类的权重(错误分类成本)
调整决策阈值
使已有的算法对少数类更加敏感
构造一个在不平衡数据上表现更好的全新算法。
题外话:评估方面的可做与不可做
首先我要小小地跑题一下。在讨论如何用不平衡数据训练分类器之前,我们必须先探讨一下如何正确评估。这是最重要的一点,因为如果你不知道该如何正确度量你的成果,你也就不能取得进展。
不要使用准确度(错误率)来评估你的分类器!因为这方面存在两个显著的问题。准确度使用天真的 0.50 的阈值来确定所属的类别,而当类不平衡时,这常常会出错。第二,分类准确度基于对错误的简单计数,而你应该对此有更深入的了解。你应该知道哪些类在哪些地方(得分的顶端、底端还是整体)出现了混淆?如果你对这些概念还不太了解,推荐阅读:/classifiers2/ 。你应该使用一个 ROC 曲线、准确度召回曲线(precision-recall curve)、Lift 曲线或利润(收益)曲线(profit (gain) curve)对分类器的表现进行可视化。
Precision-recall curve
不要在你的分类器中使用困难的分类(标签)(使用 score[3]或 predict)。而是应该使用 proba 或 predict_proba 进行概率估计。
当你得到概率估计之后,不要盲目地使用 0.50 的决策阈值来区分类别。应该再检查表现曲线之后再自己决定使用哪个阈值(下一节会谈到更多)。因为研究者曾天真地使用了 0.5 作为截止线,所以早期的一些论文中出现了很多错误。
不管你是用什么做训练的,你总是应该在你的分类器将要运行其上的自然的(分层的)分布上进行测试。参考:sklearn.cross_validation.StratifiedKFold
不使用概率估计你也可能能够成功,但如果你需要它们,要使用校准。(参考:sklearn.calibration.CalibratedClassifierCV)
上面的两幅二维图总是比单纯的数字所包含的信息更丰富,如果你需要单纯的数字指标,下面这几个可以很好地对应准确度:
ROC 曲线下的面积(AUC)是一个很好的一般统计。它等于一个随机的正面样本将得到比一个随机的负面样本更高排名的概率。
F1 分数是(F1 Score)是准确度(precision)和召回率(recall)的调和平均值。它常被用于寻找聚合度量(aggregate measure)时的文本处理中。
Cohen’s Kappa 系数是一种评估统计,其考虑了偶然预期的协议的多少。
过采样(oversampling)和欠采样(undersampling)
最简单的方法只需要对处理步骤进行一点点修改,并简单地涉及到调整样本集直到它们达到平衡。过采样会随机复制少数样例以增大它们的规模。欠采样则随机地少采样主要的类。一些数据科学家(天真地)认为过采样更好,因为其会得到更多的数据,而欠采样会将数据丢掉。但请记住复制数据不是没有后果的——因为其会得到复制出来的数据,它就会使变量的方差表面上比实际上更小。而过采样的好处是它也会复制误差的数量:如果一个分类器在原始的少数类数据集上做出了一个错误的负面错误,那么将该数据集复制五次之后,该分类器就会在新的数据集上出现六个错误。相对地,欠采样会让独立变量(independent variable)的方差看起来比其实际的方差更高。
因为所有这些原因,不同的机器学习文献在过采样、欠采样和使用自然分布之间也做出了不同的选择。
大部分机器学习软件包都可以进行简单的采样调整。R 中的 unbalanced中实现了很多专用于不平衡数据集的采样技术,scikit-learn.cross_validation 也有一些基本的采样算法。
Wallace 等人的贝叶斯论证
Wallace、Small、Brodley 和 Trikalinos 的论文《Class Imbalance, Redux》中提出的关于类不平衡(class imbalance)的理论论证和使用建议可能是这方面做得最好的[4]。他们支持对多数类进行欠采样。他们的论证是数学的且彻底的,但这里我只给出他们用来证明自己观点的一个例子。
他们认为两个类必须在一些解释变量的一些分布的尾部能明显区分开。假设你有两个带有单个独立变量 x 的类。其中每个类都是由标准差为 1 的高斯分布生成的。类 1 的均值是 1,类 2 的均值是 2. 我们任意地将类 2 定为多数类。它们看起来是这样:
给定一个 x 值,你会使用什么阈值来确定其来自哪一个类?很显然这两者之间最好的分割线是它们的中点 x=1.5,如下图中间的竖线所示:如果新样本 x 的值低于 1.5,那它可能属于类 1,否则其属于类 2。在从样本中进行学习时,我们期望在 1.5 处的分辨分割线是我们将会得到的结果;而且如果这两个类是平衡的的话,那么这就会接近于我们应该得到的结果。x 轴上的点表示从每个分布中生成的样本。
但我们已经说过类 1 是少数类,所以假设我们从其中得到了 10 个样本,而从类 2 得到了 50 个样本。那我们就很可能学习到一个有所偏移的隔离线,就像这样:
为了匹配少数类,我们可以通过欠采样多数类来做到更好。问题是我们所学习到的隔离线将具有较高的可变性(因为样本更小的),如下所示(这里展示了 10 个样本,得到了 10 条竖线):
所以最后还要使用 bagging 来讲这些分类器结合起来。整个流程看起来是这样:
这种技术还没有在 Scikit-learn 中实现,尽管已经有一个名叫 blagging.py (balanced bagging)的文件可用——实现了一个
BlaggingClassifier,可以平衡聚合(aggregation)之前的自举样本(bootstrapped samples)。
基于临近的方法(Neighbor-based approaches)
过采样和欠采样都随机选择要调整的样本的比例。其它方法则仔细地检测实例空间(instance space)和决定在它们的邻域(neighborhood)上做什么。
比如说, Tomek link 是指相反分类中实例的配对,这些相反分类之间是最为临近的。换句话说,它们是整体上非常接近的相反实例对。
Tomek 的算法可以寻找这样的配对,并移除配对中的多数实例。其中的思想是要明确少数类和多数类之间的界线,从而使少数类的区域更明显。下图给出了一个简单的 Tomek Link 移除的例子。R 包中的 unbalanced 能实现 Tomek Link 移除,另外还有很多专用于不平衡数据集的采样技术也可以。Scikit-learn 没有做这件事的内置模块,但也有一些独立的包可用(如:TomekLink:/ojtwist/TomekLink)。
合成新样本:SMOTE 及其衍生技术
研究的另一项技术不涉及对样本的重采样(resampling),而是合成新的样本。这种方法最好的例子是 Chawla 的 SMOTE(Synthetic Minority Oversampling TEchnique:合成少数类过采样技术)系统。其思想是通过在已有的样本间插值来创造新的少数类样本。这项技术的大概过程如下图所示。和前面一样,假设我们有一个多数类样本集和一个少数类样本集:
SMOTE 取得了普遍的成功并衍生出了很多变体、扩展和对不同概念的学习算法的适配。SMOTE 及其变体封装在 R 语言的 unbalanced 包和 Python 中的 UnbalancedDataset 包中。
这里还要指出 SMOTE 的一个重大限制。因为它是在稀有的样本之间插值,所以它只能生成可用样本范围内的样本——永远不会生成例外的样本。形式上,SMOTE 只能填入已有少数类样本的凸包(Convex Hull)中,但不能创造在少数类样本域之外的新样本。
调整类的权重
许多机器学习工具包都有调整类的「重要性」的方法。比如 Scikit-learn 有许多可以使用可选的 class_weight 参数(可以设置成大于 1)的分类器。这里有一个直接从 scikit-learn 文档中引用的例子,展示了将少数类的权重增加为 10 倍时的效果。黑色实线是使用默认设置(所有类权重相等)时得到的分割边界,而虚线则是少数类(红色)的 class_weight 参数改变到 10 倍时的效果。
如你所见,少数类的重要程度增加了(它的误差被认为比其它类的误差的成本更高),分离的超平面(hyperplane)得到调整以降低损失。
应该指出的是调整类的重要性通常只能影响类的误差(假阴性(False Negatives),如果少数类是阳性的话)成本。它会调整一个分离的平面并借此降低这些误差。当然,如果该分类器在训练集误差上没有错误,那也就不需要调整,所以调整类权重可能就没有效果。
这篇文章集中于相对简单的、方便的从不平衡数据中学习分类器的方式。大部分这些都涉及到在应用标准学习算法之前或之后对数据进行调整。这里还有一些其它方法值得一提。
从不平衡类进行学习一直是机器学习使用每年引入的新算法进行研究的一个领域。在总结之前,我先提几个看起来有希望的算法进展。
在 2014 年,Goh 和 Rudin 发表了论文《Box Drawings for Learning with Imbalanced Data》[5],该论文介绍了两种从样本偏斜的数据中学习的新算法。这些算法意图围绕少数类样本集群创建「box」:
他们的目标是开发出对少数类的一个简明、智能的表征。他们的方程式会惩罚 box 的数量,而惩罚则被用作是一种正则化的形式。
他们介绍了两种算法,一个(Exact Boxes)使用混合整数程序提供精确但相当昂贵的解决方案;另一个(Fast Boxes) 使用一个更快的集群方法生成初始 box,而后进行精炼。实验结果表明在大量测试数据集上,两种算法都表现相当好。
前面我提到解决不平衡问题的一种方法是丢弃少数类样本,把它当成单独分类(或异常检测)问题。近期的一项异常检测技术在该问题上表现惊人。Liu、Ting 和 Zhou 介绍了一项名为 Isolation
Forests 的技术,识别数据中异常的方式是通过学习随机森林,然后测量将每个特定数据点孤立所需的决策分类的平均值。结果得到的值能被用于计算每个数据点的异常得分,这个得分可被解释为样本所属少数类的似然度。的确,作者们使用高度不平衡的数据测试了他们的系统,并报告出了很好的结果。由 Bandaragoda、Ting、Albrecht、Liu 和 Wells 继而完成的一篇论文介绍的 Nearest Neighbor Ensembles 是类似的思路,而且能够解决
Isolation Forests 的一些短板。
购买或者创造更多数据
本文的最后一部分的重点是在默认给定不平衡数据并且需要解决该不平衡的情况下的不平衡类的问题。在一些情况下,比如 Kaggle 竞赛,你会被给定固定的数据集,不能再要更多的数据。
但你可能面临一个相关的、更难的问题:你在少数类数据上没有足够的样本。上面的介绍的技术没有一个可行,你该怎么做?
现实中,你可以购买或者创建一些领域中的少数类的样本。这是机器学习领域也正在研究的一个领域。如果少数类数据需要人们进行可靠的标记,一个常用方法是通过 Mechanical Turk 这样的服务众包出去。人类标记的可靠性可能是一个问题,但也有将人类标记与可靠性优化结合起来的研究。最后,Claudia Perlich 在她的演讲(All The Data and
Still Not Enough)中给出了一些例子:如何通过使用替代变量或问题(surrogate variable
or problems)修正数据缺乏或者没有数据的问题,或者如何使用代理和隐变量使看起来不可能的问题变得可能。与之相关的还有迁移学习(transfer learning)的方法:将在一个问题上学习到的结果迁移到另一个带有稀少样本的问题上,参看论文《Machine learning for targeted display advertising: Transfer learning in action》。
资源和拓展阅读
这里有数个说明不平衡学习不同方面的 Jupyter notebooks 可用:
一个说明高斯采样的(sampled Gaussians)的 notebook 是在 Gaussians.ipynb:/silicon-valley-data-science/learning-from-imbalanced-classes/blob/master/Gaussians.ipynb
一个 Wallace 方法的简单实现 blagging.py:/silicon-valley-data-science/learning-from-imbalanced-classes/blob/master/blagging.py。这是 sklearn 现有的 bagging 实现的简单交叉,特别是./sklearn/ensemble/bagging.py.
使用这一方法的一个 notebook 在
ImbalancedClasses.ipynb (/silicon-valley-data-science/learning-from-imbalanced-classes/blob/master/ImbalancedClasses.ipynb)是开放的。它可装载于数个领域,并且在不同分布下与其他方法进行了 blagging 对比。
在 MATLAB 上 Box Drawings 的源代码:http://web.mit.edu/rudin/www/code/BoxDrawingsCode.zip
基于 R 语言的 Isolation Forests 源代码:https://sourceforge.net/projects/iforest/
参考文献:
1. Natalie Hockham makes this point in her talk Machine learning with imbalanced data sets, which focuses on imbalance in the context of credit card fraud detection.
2. By definition there are fewer instances of the rare class, but the problem comes about because the cost of missing them (a false negative) is much higher.
3. The details in courier are specific to Python’s Scikit-learn.
4. “Class Imbalance, Redux”. Wallace, Small, Brodley and Trikalinos. IEEE Conf on Data Mining. 2011.
5. Box Drawings for Learning with Imbalanced Data.” Siong Thye Goh and Cynthia Rudin. KDD-2014, August 24–27, 2014, New York, NY, USA.
6. “Isolation-Based Anomaly Detection”. Liu, Ting and Zhou. ACM Transactions on Knowledge Discovery from Data, Vol. 6, No. 1. 2012.
7. “Efficient Anomaly Detection by Isolation Using Nearest Neighbour Ensemble.” Bandaragoda, Ting, Albrecht, Liu and Wells. ICDM-2014
欢迎加入我爱机器学习QQ14群:
微信扫一扫,关注我爱机器学习公众号
欢迎加入我爱机器学习QQ14群:
最新文章列表
NIPS 2016 — Day 1 Highlights NIPS 2016 — Day 2 Highlights:...
2017年十月 &(19)
2017年九月 &(46)
2017年八月 &(58)
2017年七月 &(60)
2017年六月 &(67)
2017年五月 &(66)
2017年四月 &(65)
2017年三月 &(54)
2017年二月 &(48)
2017年一月 &(54)
2016年十二月 &(62)
2016年十一月 &(97)
2016年十月 &(97)
2016年九月 &(124)
2016年八月 &(83)
2016年七月 &(13)
2016年六月 &(10)
2016年五月 &(7)
2016年四月 &(9)
2016年三月 &(7)
2016年二月 &(2)
2016年一月 &(3)
2015年十二月 &(5)
2015年十一月 &(4)
2015年十月 &(2)
2015年九月 &(2)
2015年八月 &(3)
2015年七月 &(6)
2015年六月 &(8)
2015年五月 &(4)
2015年四月 &(1)
2015年三月 &(3)
2015年二月 &(1)
2015年一月 &(2)
2014年十二月 &(4)
2014年十一月 &(2)
2014年十月 &(3)
2014年九月 &(4)
2014年八月 &(22)
2014年七月 &(40)
2014年六月 &(61)
2014年五月 &(63)
2014年四月 &(187)
2014年三月 &(4798)
2014年二月 &(764)
2014年一月 &(330)
2013年十二月 &(145)
2013年十一月 &(126)
2013年十月 &(216)
2013年九月 &(284)
2013年八月 &(327)
2013年七月 &(275)
2013年六月 &(315)
2013年五月 &(228)
2013年四月 &(175)
2013年三月 &(186)
2013年二月 &(118)
2013年一月 &(210)
2012年十二月 &(221)
2012年十一月 &(155)
2012年十月 &(143)
2012年九月 &(98)
2012年八月 &(99)
2012年七月 &(109)
2012年六月 &(75)
2012年五月 &(88)
2012年四月 &(78)
2012年三月 &(78)
2012年二月 &(50)
2012年一月 &(17)
2011年十二月 &(27)
2011年十一月 &(6)
2011年十月 &(11)
2011年九月 &(13)
2011年八月 &(13)
2011年七月 &(19)
2011年六月 &(18)
2011年五月 &(6)
2011年四月 &(12)
2011年三月 &(15)
2011年二月 &(6)
2011年一月 &(9)
2010年十二月 &(6)
2010年十一月 &(11)
2010年十月 &(5)
2010年九月 &(8)
2010年八月 &(5)
2010年七月 &(12)
2010年六月 &(4)
2010年五月 &(7)
2010年四月 &(6)
2010年三月 &(12)
2010年二月 &(7)
2010年一月 &(2)
2009年十二月 &(5)
2009年十一月 &(16)
2009年十月 &(6)
2009年九月 &(7)
2009年八月 &(7)
2009年七月 &(5)
2009年六月 &(6)
2009年五月 &(6)
2009年四月 &(4)
2009年三月 &(7)
2009年二月 &(6)
2009年一月 &(1)
2008年十二月 &(4)
2008年十一月 &(5)
2008年十月 &(1)
2008年八月 &(1)
2008年七月 &(3)
2008年六月 &(3)
2008年五月 &(3)
2008年三月 &(1)
2007年十二月 &(1)
2007年十月 &(1)
2007年八月 &(4)
2007年七月 &(1)关注微口网微博
微信号:iweikou
选自Analytics Vidhya
作者:Upasana Mukherjee
机器之心编译
参加:马亚雄、微胖、黄小天、吴攀
图 3:依据集成的方法
上述有些触及经过重采样原始数据供给平衡类来处理不平衡数据,在本节中,咱们将研讨一种代替方法:修正现有的分类算法,使其适用于不平衡数据集。
总观测 = 1000
过采样以后新数据会集的整体调查 = 1380
对分类算法的体现的评估是用一个尖嘴薄舌关于实践种类和猜想种类信息的混杂矩阵(Confusion Matrix)来衡量的。
根本学习器/分类器是弱学习器,即猜想精确度仅略好于平均水平。弱是指当数据的存在小改变时,会引起分类模型呈现大的改变。
诈骗性调查 = 20
2.2 算法集成技能(Algorithmic Ensemble Techniques)
能够极好地泛化——适宜任何类型的分类疑问且不易过拟合
比方假如有一个尖嘴薄舌了 1000 次调查的数据集,其间有 20 次被符号为了诈骗。刚开始,一切的调查都被分配了一样的权重 W1,根底分类器精确分类了其间 400 次调查。
总观测 = 1000
2.1.2 随机过采样(Random Over-Sampling)
过采样(Over-Sampling)经过随机仿制少量类来添加其间的实例数量,然后可添加样本中少量类的代表性。
2.1.3 依据聚类的过采样(Cluster-Based Over Sampling)
分类器在练习实例上的练习差错满足低
正如大大都过采样技能,这一算法的首要缺陷是有也许过拟合练习集。
1. Dmitry Pavlov, Alexey Gorodilov, Cliff Brunk「BagBoo: A Scalable Hybrid Bagging-theBoosting Model」.2010
不平衡种类的实例
非诈骗性调查 = 980
总观测 = 1000
诈骗种类象征 = 0(非诈骗实例)
在梯度 Boosting 中,决策树(Decision Tree)被用作弱学习器。
辨认客户流失率的数据集,其间绝大大都顾客都会继续运用该项效劳。具体来说,电信公司中,客户流失率低于 2%。
被随机欠采样挑选的样本也许具有差错。它不能精确代表大大都。然后在实践的测试数据集上得到不精确的成果。
图 1:构成少量类过采样算法,其间 N 是特色的数量
如上表所示,模型的精确率 = (TP+TN) / (TP+FN+FP+TP)
诈骗性调查 = 20
图 2:凭借 SMOTE 的构成实例生成
少量类(诈骗性调查)= 300
在喧闹的数据环境中,bagging 的功能优于 boosting
十分简略就能完结
少量类聚类
削减了 bagged 分类器的过错分类
经过随机采样生成的构成样本而非实例的副本,能够减轻过拟合的疑问。
它能够进步运转时刻;而且当练习数据集很大时,能够经过削减样本数量来处理存储疑问。
平衡分类的首要方针不是添加少量类的的频率抱怨降低大都类的频率。这么做是为了取得大概一样数量的两个类的实例。让咱们一同看看几个重采样(resampling)技能:
&1. 聚类 1:250 个调查
对噪声数据和反常值灵敏
处理不平衡数据集需求在往机器学习算法输入数据之前,拟定比方进步分类算法或平衡练习数据的类(数据预处理)的战略。后者因为运用规模广泛而更常运用。
稀有事情数据集的数据结构如下,缺失值删去、反常值处理以及降维
梯度 Boosting 能够经过 R 言语运用 SAS Miner 和 GBM 软件包中的 Gradient Boosting Node 完结。
bagging 只会在根本分类器作用极好时才有用。过错的分类也许会进一步降低体现。
大都类聚类
当面对不平衡的数据集的时分,机器学习算法倾向于发作不太令人满意的分类器。关于任何一个不平衡的数据集,假如要猜想的事情归于少量种类,而且事情份额小于 5%,那就一般将其称为稀有事情(rare event)。
2.2.2.2 梯度树 boosting
Ada Boost 是最早的 boosting 技能,其能经过很多弱的和不精确的规矩的联络来发明高精确度的猜想。其间每个练习器都是被串行地练习的,其方针在每一轮精确分类上一轮没能精确分类的实例。
尽管 Ada Boost 和梯度 Boosting 都是依据弱学习器/分类器作业的,而且都是在努力使它们成为强壮的学习器,但这两种方法之间存在一些明显的区别。Ada Boost 需求在实践的练习进程之前由用户指定一组弱学习器或随机生成弱学习器。其间每个学习器的权重依据其每步是不是精确执行了分类而进行调整。而梯度 Boosting 则是在练习数据集上构建第一个用来猜想样本的学习器,然后核算丢失(即实在值和第一个学习器的输出之间的差),然后再运用这个丢失在第二个期间构建改善了的学习器。
从具有更换的集体中挑选 10 个自举样品。每个样本尖嘴薄舌 200 个调查值。每个样本都不一样于原始数据集,但类似于散布和改变上与该数据集类似。机器学习算法(如 logistic 回归、神经网络与决策树)拟合尖嘴薄舌 200 个调查的自举样本,且分类器 c1,c2 ... c10 被聚合以发作复合分类器。这种集成方法能发作更强的复合分类器,因为它组合了各个分类器的成果。
2. 处理不平衡数据集的方法
欠采样以后新数据集的事情发作率 = 20/118 = 17%
速度比一般的 Gradient Boosting 快 10 倍,因为其能够完结并行处理。它是高度灵敏的,因为用户能够自定义优化方针和评估规范,其具有内置的处理缺失值的机制。
不平衡种类的实例
但是,在不平衡范畴时,精确率并不是一个用来衡量模型功能的适宜方针。例如:一个分类器,在尖嘴薄舌 2% 的稀有事情时,假如它将一切归于大有些种类的实例都精确分类,完结了 98% 的精确率;而把占 2% 的少量观测数据视为噪声并消除了。
运用的数据集
2.2.2. 依据 Boosting 的方法
&6. 聚类 6:170 个调查
&1. 聚类 1:150 个调查
这一技能可用来防止过拟合——当直接仿制少量类实例并将其添加到主数据集时。从少量类中把一个数据子集作为一个实例取走,接着创立类似的新构成的实例。这些构成的实例接着被添加进正本的数据集。新数据集被用作样本以练习分类模型。
机器之心编译,转发请联络本大众号取得授权。
非诈骗性调查 = 980
总观测= 1000
&5. 聚类 5:170 个调查
运用构成少量类过采样技能(SMOTE)来平衡不平衡数据集——该技能是企图经过创立构成实例来平衡数据集。下面以 R 代码为例,演示运用 Gradient Boosting 算法来练习平衡数据集。
在每一次迭代中,这些更新过的加权调查都会被送入弱的分类器以进步其体现。这个进程会一向继续,直到过错分类率明显降低,然后得到一个强壮的分类器。
总观测 = 1000
不会丢失有价值信息。
让咱们凭借一个实例来了解不平衡种类。
但是,最大的妨碍之一抱怨海量的数据及其散布。诈骗性买卖的数量要远低于正常和健康的买卖,也抱怨说,它只占到了总观丈量的大概 1-2%。这儿的疑问是进步辨认稀有的少量种类的精确率,而不是完结更高的整体精确率。
大都类(非诈骗性调查)= 980
进步了机器学习算法的稳定性与精确性
稀有事情份额 = 2%
从少量类中取走一个尖嘴薄舌 15 个实例的样本,并生成类似的构成实例 20 次。
随机欠采样的方针是经过随机地消除占大都的类的样正本平衡类散布;直到大都类和少量类的实例完结平衡,方针才算达到。
医疗确诊中辨认稀有疾病的数据集
在比照经过全部地联络上述技能而构建的多个猜想模型时,ROC 曲线下的 Lift & Area 将会在决议最优模型上发挥作用。
3. Lina Guzman, DIRECTV「Data sampling improvement by developing SMOTE technique in SAS」.Paper
------------------------------------------------
该算法将少量种类的样本分为 3 个不一样的组:安全样本、鸿沟样本和潜在噪声样本。分类经过核算少量类的样本和练习数据的样本之间的间隔来完结。安全样本是能够进步分类器功能的那些数据点。而另一方面,噪声是能够降低分类器的功能的数据点。两者之间的那些数据点被分类为鸿沟样本。
3. 实践事例
这个事例的数据剖析中面对的首要疑问是:关于这些先天抱怨小概率的反常事情,怎么经过获取适宜数量的样正本得到一个平衡的数据集?
当今公用事业职业面对的首要应战之一抱怨电力偷盗。电力偷盗是全球第三大偷盗方式。不断添加的公用事业公司倾向于运用高档的数据剖析技能和机器学习算法来辨认代表偷盗的耗费形式。
在这种状况下,K-均值聚类算法独登时被用于少量和大都类实例。这是为了辨认数据会集的聚类。随后,每一个聚类都被过采样以至于一样类的一切聚类有着一样的实例数量,且一切的类有着一样的巨细。
自然灾害,例如地震
&3. 聚类 3:170 个调查
2.1.4 信息性过采样:构成少量类过采样技能(SMOTE)
&6. 聚类 6:130 个调查
这种状况下咱们不重复地从非诈骗实例中取 10% 的样本,并将其与诈骗性实例相联络。
从这儿下载数据集:/wp-content/uploads/63705/SampleData_IMC.csv
当生成构成性实例时,SMOTE 并不会把来自其他类的相邻实例思考进来。这致使了类堆叠的添加,并会引进额定的噪音。
这个在平衡数据集上运用了 SMOTE 并练习了一个 gradient boosting 算法的平衡数据集的方法能够明显改善猜想模型的精确度。较之往常剖析建模技能(比方 logistic 回归和决策树),这个方法将其 lift 进步了 20%,精确率也进步了 3 到 4 倍。
原文地址:/blog/2017/03/imbalanced-classification-problem/
有关于其它 Boosting 技能的长处:
然后,那 600 次被过错分类的调查的权重增大为 W2,而这 400 次被精确分类的实例的权重减小为 W3。
图 4:Bagging 方法
SMOTE 对高维数据不是很有用。
&4. 聚类 4:170 个调查
Bagging 是 Bootstrap Aggregating 的缩写。传统的 Bagging 算法尖嘴薄舌生成「n」个不一样更换的引导练习样本,并别离练习每个自举算法上的算法,然后再聚合猜想。
Boosting 是一种集成技能,它能够将弱学习器联络起来发明出一个能够进行精确猜想的强壮学习器。Boosting 开始于在练习数据上预备的根本分类器/弱分类器。
&1. 聚类 1:170 个调查
在每一个过程,该丢失函数的残差(residual)都是用梯度降低法核算出来的,而新的残差会在后续的迭代中成为方针变量。
比方决策树和 Logistic 回归这些规范的分类算法会倾向于数量多的种类。它们往往会仅猜想占数据大大都的种类。在总量中占少量的种类的特征就会被视为噪声,而且一般会被疏忽。因而,与大都种类对比,少量种类存在对比高的误判率。
这是 SMOTE 的改善版别,SMOTE 没有思考数据会集少量类和潜在噪声的根本散布。所以为了进步 SMOTE 的作用,MSMOTE 应运而生。
诈骗观测 = 20
1. 不平衡数据集面对的应战
&2. 聚类 2:250 个调查
2.2.2.3 XGBoost
不平衡数据集的特色不一样,最有用的技能也会有所不一样。比照模型时要思考有关评估参数。
&1. 聚类 1:8 个调查
# 加载数据rareevent_boost &- read.table("D:/Upasana/RareEvent/churn.txt",sep="|", header=TRUE)dmy&-dummyVars("~.",data=rareevent_boost)rareeventTrsf&-data.frame(predict(dmy,newdata= rareevent_boost))set.seed(10)sub &- sample(nrow(rareeventTrsf), floor(nrow(rareeventTrsf) * 0.9))sub1 &- sample(nrow(rareeventTrsf), floor(nrow(rareeventTrsf) * 0.1))training &- rareeventTrsf [sub, ]testing &- rareeventTrsf [-sub, ]training_sub&- rareeventTrsf [sub1, ]tables(training_sub)head(training_sub)# 关于不平衡的数据集 #install.packages("unbalanced")library(unbalanced)data(ubIonosphere)n&-ncol(rareevent_boost)output&- rareevent_boost $CHURN_FLAGoutput&-as.factor(output)input&- rareevent_boost [ ,-n]View(input)# 运用 ubSMOTE 来平衡数据集 #data&-ubBalance(X= input, Y=output, type="ubSMOTE", percOver=300, percUnder=150, verbose=TRUEView(data)# 平衡的数据集 #balancedData&-cbind(data$X,data$Y)View(balancedData)table(balancedData$CHURN_FLAG)# 写入平衡的数据集来练习模型 #write.table(balancedData,"D:/ Upasana/RareEvent /balancedData.txt", sep="\t", row.names=FALSE)# 创立 Boosting 树模型 #repalceNAsWithMean &- function(x) {replace(x, is.na(x), mean(x[!is.na(x)]))}training &- repalceNAsWithMean(training)testing &- repalceNAsWithMean(testing)# 重采样技能 #View(train_set)fitcontrol&-trainControl(method="repeatedcv",number=10,repeats=1,verbose=FALSE)gbmfit&-train(CHURN_FLAG~.,data=balancedData,method="gbm",verbose=FALSE)# 为测试数据评分 #testing$score_Y=predict(gbmfit,newdata=testing,type="prob")[,2]testing$score_Y=ifelse(testing$score_Y&0.5,1,0)head(testing,n=10)write.table(testing,"D:/ Upasana/RareEvent /testing.txt", sep="\t", row.names=FALSE)pred_GBM&-prediction(testing$score_Y,testing$CHURN_FLAG)# 模型的体现 #model_perf_GBM &- performance(pred_GBM,tpr",fpr")model_perf_GBM1 &- performance(pred_GBM,tpr",fpr")model_perf_GBMpred_GBM1&-as.data.frame(model_perf_GBM)auc.tmp_GBM &- performance(pred_GBM,"auc")AUC_GBM &- as.numeric(auc.tmp_GBM@y.values)auc.tmp_GBM成果
非诈骗性调查 = 980
随机欠采样以后的非诈骗性调查 = 980 x 10% = 98
在梯度 Boosting(Gradient Boosting)中,很多模型都是按次序练习的。其是一种数值优化算法,其间每个模型都运用梯度降低(Gradient Descent)方法来最小化丢失函数 y = ax+b+e。
XGBoost 能够运用 R 和 Python 中的 XGBoost 包完结。
非诈骗性调查 = 980
体现优于欠采样。
这个比方运用了电信公司的尖嘴薄舌了 47241 条顾客记载的数据集,每条记载尖嘴薄舌的信息有 27 个要害猜想变量
遇到不平衡数据集时,没有改善猜想模型精确性的一站式处理方案。你也许需求测验多个方法来搞明白最适宜数据集的采样技能。在绝大大都状况下,比方 SMOTE 以及 MSMOTE 之类的构成技能会比传统过采样或欠采样的方法要好。
因而,总结一下,在测验运用不平衡数据集处理特定事务的应战时,由规范机器学习算法生成的分类器也许无法给出精确的成果。除了诈骗性买卖,存在不平衡数据集疑问的多见事务疑问还有:
生成构成性实例以后,创立下面的数据集
非诈骗性调查 = 980
2. 处理不平衡数据集的方法
图 7:梯度 Boosting 方法
为了取得非常好的成果,你能够在运用比方 Gradeint boosting 和 XGBoost 的一起也运用 SMOTE 和 MSMOTE 等构成采样技能。
类似地,该算法内部核算该丢失函数,并在每个期间更新该方针,然后在初始分类器的根底上提出一个改善过的分类器。
2.2.1 依据 Bagging 的方法
发作这种状况的原因是机器学习算法一般被规划成经过削减差错来进步精确率。所以它们并没有思考种类的散布/份额或者是种类的平衡。
事情率= 2%
&3. 聚类 3:230 个调查
比方:在一个公用事业诈骗检查数据会集,你有以下数据:
诈骗性调查 = 20
集成方法的首要意图是进步单个分类器的功能。该方法从原始数据中构建几个两级分类器,然后联系它们的猜想。
这种状况下咱们仿制 20 个诈骗性调查 20 次。
事情发作率 = 2%
非诈骗观测 = 980
梯度 Boosting 算法一般有 3 个能够微调的参数:缩短(shrinkage)参数、树的深度和树的数量。要极好拟合,每个参数都需求适宜的练习。假如这些参数没有得到极好的调理,那么就也许会致使过拟合。
3.2 方法描绘
诈骗调查= 20
事情发作率 = 2%
关于一个学习过的分类器,假如要做出强壮的猜想,其应当具有以下三个条件:
大都类聚类
&4. 聚类 4:200 个调查
1. 不平衡数据集面对的应战
2.1 数据层面的方法:重采样技能
这篇文章中,咱们会展现多种在高度不平衡数据集上练习一个功能杰出的模型的技能。而且用下面的诈骗检查数据集来精确地猜想稀有事情:
&5. 聚类 5:150 个调查
事情发作率 = 2%
&2. 聚类 2:170 个调查
每一个弱假定都有略优于随机猜想的精确度,即差错项
(t) 应当略大概 -β,其间 β&0。这是这种 boosting 算法的根底假定,其能够发作一个仅有一个很小的差错的终究假定。
&2. 聚类 2:12 个调查
梯度增强过的树比随机森林更难拟合
它会丢掉对构建规矩分类器很主要的有价值的潜在信息。
2.15 改善的构成少量类过采样技能(MSMOTE)
事情发作率 = 300/1280 = 23.4 %
事情份额 = 2%
与欠采样不一样,这种方法不会带来信息丢失。
图 5:Boosting 方法
分类器在满足数量的练习实例进步行了练习
总观测 = 1000
比方说,决策树拟合的是精确分类仅 5 次调查为诈骗调查的状况。然后依据该过程的实践输出和猜想输出之间的差,核算出一个可微的丢失函数。该丢失函数的这个残差是下一次迭代的方针变量 F1。
诈骗观测 = 20
因为仿制少量类事情,它加大了过拟合的也许性。
总观测 = 1000
4. Mikel Galar, Alberto Fernandez, Edurne Barrenechea, Humberto Bustince and Francisco Herrera「A Review on Ensembles for the Class Imbalance Problem: Baggng-, Boosting-, and Hybrid-Based Approaches」.2011 IEEE &(图八)
每个聚类过采样以后,一样类的一切聚类尖嘴薄舌一样数量的调查。
联络诈骗性与非诈骗性调查以后的整体调查 = 20+98 = 118
这篇攻略描绘了运用多种采样技能来处理这种种类不平衡疑问的各种方法。这篇文章还对比了每种技能的优缺陷。最终,这篇文章作者还向咱们展现了一种让你能够创立一个平衡的类散布的方法,让你能够运用专门为此规划的集成学习技能(ensemble learning technique)。这篇文章作者为来自 KPMG 的数据剖析参谋 Upasana Mukherjee。
XGBoost(Extreme Gradient Boosting/极限梯度进步)是 Gradient Boosting 算法的一种更领先和更有用的完结。
&2. 聚类 2:120 个调查
鄙人一次迭代中,新分类器将要点放在那些在上一轮中被过错分类的事例上。
事情发作率 = 2%
有助于战胜由不一样子聚类构成的类之间的不平衡的应战。每一个子聚类不尖嘴薄舌一样数量的实例。
图 6:自适应 boosting 的方法
诈骗性调查 = 20
依据聚类的过采样以后的事情率 = 500/ () = 33 %
非诈骗性观测 = 980
Bagging 常被用于削减过拟合,以进步学习作用生成精确猜想。与 boosting 不一样,bagging 方法答应在自举样本中进行更换。
欠采样以后新数据集的事情发作率 = 400/1380 = 29%
(图一十)
仿制少量类调查以后的诈骗性调查 = 400
2.2.2.1 自适应 boosting——Ada Boost
少量类聚类
这种聚类技能有助于战胜类之间不平衡的应战。表明正例的样本数量不一样于表明反例的样本数量。
2. Fithria Siti Hanifah , Hari Wijayanto , Anang Kurnia「SMOTE Bagging Algorithm for Imbalanced Data Set in Logistic Regression Analysis」. Applied Mathematical Sciences, Vol. 9, 2015
(图一十一)
面对不平衡数据集的时分,传统的机器学习模型的评估方法不能精确地衡量模型的功能。
假如你研讨过一点机器学习和数据科学,你必定遇到过不平衡的类散布(imbalanced class distribution)。这种状况是指:归于某一种类的观测样本的数量明显少于其它种类。
在每一轮以后,它会愈加重视那些更难被分类的实例。这种重视的程度能够经过一个权重值(weight)来丈量。起先,一切实例的权重都是持平的,经过每一次迭代以后,被过错分类的实例的权重会增大,而被精确分类的实例的权重则会减小。
尽管 MSOMTE 的根本流程与 SMOTE 的根本流程一样,在 MSMOTE 中,挑选近邻的战略不一样于 SMOTE。该算法是从安全样本动身随机挑选 k-最近邻的数据点,并从鸿沟样本动身挑选最近邻,而且不对潜在噪声样本进行任何操作。
运用规范机器学习技能时面对的应战
3.1 数据描绘
和遇到了负丢失就会中止割裂节点的 Gradient Boosting 不一样,XGBoost 会割裂到指定的最大深度,然后会对其树进行反向的剪枝(prune),移除仅有一个负丢失的割裂。
一般用于处理不平衡数据集疑问的领先 bagging 技能之一是 SMOTE bagging。这个方法采取了一种彻底不一样于传统 bagging 技能的方法来发明每个 Bag/Bootstrap。经过每次迭代时设置一个 SMOTE 重采样率,它能够借由 SMOTE 算法生成正例。每次迭代时,负例集会被 bootstrap。
非诈骗调查= 980
比方,假如有一个尖嘴薄舌了 1000 次调查的练习数据集,其间有 20 次被符号为了诈骗,而且还有一个初始的根底分类器。方针变量为 Fraud,当买卖是诈骗时,Fraud=1;当买卖不是诈骗时,Fraud=0.
2.1.1 随机欠采样(Random Under-Sampling)
这个疑问在反常检查是至关主要的的场景中很明显,例如电力偷盗、银行的诈骗买卖、稀有疾病辨认等。在这种状况下,运用传统机器学习算法开宣布的猜想模型也许会存在差错和不精确。
诈骗种类象征 = 1(诈骗实例)
参加机器之心(全职记者/实习生):
投稿或寻求报导:
广告&商务协作:
看过本文的人还看过
人气:1334 更新:
人气:656 更新:
人气:536 更新:
人气:481 更新:
机器之心的更多文章
大家在看 ^+^
推荐阅读 ^o^
『中國邊疆研究與歷史書寫』研討會日程安排
过真伤己、过直伤人
中国人走得太远太快,灵魂跟不上了(深度好文)
他说第二,有人敢说第一吗?
猜你喜欢 ^_^
24小时热门文章
微信扫一扫
分享到朋友圈}

我要回帖

更多关于 大数据产业问题 地区发展不平衡 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信