干货整理:处理不平衡数据的技巧总结!收好不谢

640?wx_fmt=gif&wxfrom=5&wx_lazy=1


文:Rick Radewagen

译:李萌


在银行欺诈检测,市场实时竞价或网络入侵检测等领域通常是什么样的数据集呢?


在这些领域使用的数据通常有不到1%少量但“有趣的”事件,例如欺诈者利用信用卡,用户点击广告或者损坏的服务器扫描网络。 


然而,大多数机器学习算法对于不平衡数据集的处理不是很好。 以下七种技术可以帮你训练分类器来检测异常类。


1.使用正确的评估指标 



对使用不平衡数据生成的模型应用不恰当的评估指标可能是危险的。


640?wx_fmt=png&wxfrom=5&wx_lazy=1


想象一下,我们的训练数据如上图所示。 如果使用精度来衡量模型的好坏,使用将所有测试样本分类为“0”的模型具有很好的准确性(99.8%),但显然这种模型不会为我们提供任何有价值的信息。


在这种情况下,可以应用其他替代评估指标,例如:

  • 精度/特异性:有多少个选定的相关实例。

  • 调用/灵敏度:选择了多少个相关实例。

  • F1得分:精度和召回的谐波平均值。

  • MCC:观察和预测的二进制分类之间的相关系数。

  • AUC:正确率与误报率之间的关系。



2.重新采样训练集 



除了使用不同的评估标准外,还可以选择不同的数据集。使平衡数据集不平衡的两种方法:欠采样和过采样。


欠采样通过减少冗余类的大小来平衡数据集。当数据量足够时使用此方法。通过将所有样本保存在少数类中,并在多数类中随机选择相等数量的样本,可以检索平衡的新数据集以进一步建模。


相反,当数据量不足时会使用过采样,尝试通过增加稀有样本的数量来平衡数据集。不是去除样本的多样性,而是通过使用诸如重复,自举或SMOTE等方法生成新样本(合成少数过采样技术)


请注意,一种重采样方法与另一种相比没有绝对的优势。这两种方法的应用取决于它适用的用例和数据集本身。过度取样和欠采样不足结合使用也会有很好的效果。



3.以正确的方式使用K-fold交叉验证 


值得注意的是,使用过采样方法来解决不平衡问题时,应适当地应用交叉验证。切记,过采样会观察到稀有的样本,并根据分布函数自举生成新的随机数据。如果在过采样之后应用交叉验证,那么我们所做的就是将模型过度适应于特定的人工引导结果。这就是为什么在过采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有对数据进行重复采样,可以将随机性引入到数据集中,以确保不会出现过拟合问题。


4.组合不同的重采样数据集


 

生成通用模型的最简单方法是使用更多的数据。问题是,开箱即用的分类器,如逻辑回归或机森随林,倾向于通过丢弃稀有样例来推广。一个简单的最佳实现是建立n个模型,使用少数类的所有样本和数量充足类别的n个不同样本。假如您想要组合10个模型,需要少数类1000例,随机抽取10.000例多数类的样本。然后,只需将10000个样本分成10个块,训练出10个不同的模型。


640?wx_fmt=png


 如果您有大量数据,那么这种方法很简单,完美地实现水平扩展,因此您可以在不同的集群节点上训练和运行模型。集合模型也趋于一般化,使得该方法容易处理。


5.用不同比例重新采样


 

以前的方法可以通过少数类和多数类之间的比例进行微调。最好的比例在很大程度上取决于所使用的数据和模型。但是,不是在整体中以相同的比例训练所有模型,合并不同的比例值得尝试。 所以如果训练了10个模型,对一个模型比例为1:1(少数:多数),另一个1:3甚至是2:1的模型是有意义的。 根据使用的模型可以影响一个类获得的权重。


640?wx_fmt=png



6. 对多数类进行聚类


 

Sergey Quora提出了一种优雅的方法[2]。他建议不要依赖随机样本来覆盖训练样本的种类,而是将r个分组中的多数类进行聚类,其中r为r中的样本数。对于每个组,只保留质心(样本的中心)。然后该模型仅保留了少数类和样本质心来训练。


7.设计自己的模型


 

以前的所有方法都集中在数据上,并将模型作为固定的组件。但事实上,如果模型适用于不平衡数据,则不需要对数据进行重新采样。如果数据样本没有太多的倾斜,著名的XGBoost已经是一个很好的起点,因为该模型内部对数据进行了很好的处理,它训练的数据并不是不平衡的。但是再次,如果数据被重新采样,它只是悄悄进行。

 

通过设计一个损失函数来惩罚少数类的错误分类,而不是多数类,可以设计出许多自然泛化为支持少数类的模型。例如,调整SVM以相同的比例惩罚未被充分代表的少数类的分类错误。

640?wx_fmt=png



综上所述


这不是一份独家的技术清单,而是处理不平衡数据的一个起点。


没有适合所有问题的最佳方法或模型,强烈建议您尝试不同的技术和模型来评估哪些方法最有效。 可以尝试创造性地结合不同的方法。


同样重要的是,要注意在不平衡类出现的许多领域(例如欺诈检测,实时竞价)中,“市场规则”正在不断变化。所以,要查看一下过去的数据是否已经过时了。


文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。

640?wx_fmt=png


640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB,凉凉?

英国《卫报》正式告别 MongoDB,完成了向 PostgreSQL 的迁移;RedHat 移除 MongoDB,Fedora、Debian 亦在其列;再加上前不久刚因程序员爬虫而扣上的一口 2 亿简历泄露的安全事故大黑锅——比起 “Hello World”,一只脚刚踏…

用ADO.NET的ExecuteScalar方法返回单一值-资讯动态

[转]http://www.bitscn.com/pdb/dotnet/200807/147205.html 若您程序中执行的 SQL statement 或 Stored Procedure,只是要返回计算过的「单一值」,例如: SELECT Count(*) FROM 员工数据表 或只会回传符合条件的「第一笔」record 的「第一个」column 其值…

linux ubuntu 开启ssh服务,开启SSH服务远程登录ubuntu

Ubuntu系统(14.04 LTS)ssh–secure shell,提供安全的远程登录。从事嵌入式开发搭建linux开发环境中,ssh的服务的安装是其中必不可少的一步。ssh方便一个开发小组中人员登录一台服务器,从事代码的编写、编译、运行。方便代码的共享及管理。ssh…

兄dei,Python数据竞赛和5万现金奖励了解一下

“少年,我看你骨骼精奇,是万中无一的技术奇才,维护世界和平就靠你了,我这有一个拯救世界的机会(还有50000大奖,美滋滋……),见与你有缘就免费告诉你了!”剧情是这样展开的…

聊聊自驱团队的构建(四)

本文聊聊一个议题,构建知识型组织。1 背景研发团队最重要的一件事莫过于重视知识工作的开展了,尤其是以.NET为主要技术栈的企业,随着招人成本的不断提高,依托团队组织建立的知识型队伍,定期开展培训,促进团…

linux适合搭建什么服务器吗,Linux 的三种服务器的搭建

好久没学专业课了,今天开始搞搞板子,搞搞linux1.tftp。干吗的?用于宿主机与目标机的通信。简而言之就是电脑与板子的通信2.NFS。?干嘛的?全称 NET FILE DYSTEM 简单的来说就在一台linux主机上设置共享文件,…

别再提程序员应届年薪20万了,人工智能已经年薪60万了!

对人工智能而言,2017是不平凡的一年:AlphaGo再胜人类腾讯宣布进军AI百度无人驾驶汽车上五环AI教育要从娃娃抓起寒武纪成全球AI芯片首个独角兽阿里巴巴成立达摩院类人机器人Sophia首获公民身份国家正式公布人工智能四大平台..........近年来,人…

动手造轮子:实现一个简单的基于 Console 的日志输出

动手造轮子:实现一个简单的基于 Console 的日志输出Intro之前结合了微软的 Logging 框架和 Serilog 写了一个简单的日志框架,但是之前的用法都是基于 log4net、serilog 的,没有真正自己实现一个日志输出,比如 Console、文件、数据…

Windows Phone 7Silverlight控件之--Panorama

Silverlight for Windows Phone 7的Pivot、Panorama控件是一个类似于Android应用程序列表中可以翻页控件,具有如下特点 1.简单的XAML和编程接口 2.完全支持数据绑定、内容模板属性和项目容器样式 3.内置黑、白两种皮肤样式 4.内置触控导航,可以让用户快速…

linux 往文件写4k大小,[svc]为何linux ext4文件系统目录默认大小是4k?

linux ext4普通盘为什么目录大小是4k?Why does every directory have a size 4096 bytes (4 K)?To understand this, youd better have some basic knowledge of the following (file system):inode (contains file attributes, metadata of file, pointer structure)file (c…

3月份GitHub上最热门的开源项目

本篇文章为大家盘点了3月份GitHub最热门的开源项目,一起来看看你都知道哪些,或者有哪些你已经在使用的了。1Interview-Notebookhttps://github.com/CyC2018/Interview-Notebook Star 11975此项目是作者在准备 2018 年春招实习过程中的学习总结&#xff0…

自定义验证规则ValidationAttribute的使用

概述大家在做项目的时候,在实体类上添加一些特性,可以实现后端实体的数据校验。有时候,可能需要自定义验证属性。实现原理:利用反射获取实体的每一个属性,并通过属性获取属性上标注的特性,调用特性的Validate方法&…

【百度分享】基于内核模块的测试代码编写(二)

4. 用户空间和内核空间的交互 在解决了在内核空间置入可运行代码后,需要解决的是用户空间和内核空间的交互。具体来说,需要达到以下三个功能:用户空间的程序向内核空间下的程序控制,用户空间到内核空间的数据传递,内…

linux sed 空间模式,整理:SED的模式空间与缓冲区及n,N,d,D,p,P,h,H,g,G,x解析...

sed命令n,N,d,D,p,P,h,H,g,G,x解析1、sed执行模板sed ‘模式{命令1;命令2}’ 即逐行读入模式空间,执行命令,最后输出打印出来2、p打印…

你碰到过的最难调试的 Bug 是什么样的?

我们做开发的应该都会有深刻的体会,有时候会遇到一些莫名奇妙的BUG不知所措,解决BUG到近乎崩溃,更有甚者有人居然会在梦中解决掉BUG。下面我们看几个有意思的解决Bug的故事:知乎网友李幼萌:08年的时候,我所…

java面试题1

一、基础问答 1.下面哪些类可以被继承? java.lang.Thread (T)    java.lang.Number (T)    java.lang.Double (F)    java.lang.Math (F)    java.lang.Void (F)    java.lang.Class (F)    java.lang.ClassLoader (T) 2.抽象类和接口的区别 (1)接口可以被多…

云原生 | 阿里巴巴的Dapr实践与探索

【Dapr】| 原文/敖小剑,翻译/Edison本文原文来自Dapr Blog,作者阿里云高级技术专家敖小剑。本文是我根据自己的理解翻译了其中的一部分并加了一些参考文献中的内容,所以并非完整翻译,点击本文底部“阅读原文”即可阅读原版英文全文…

linux安装grpc占用空间大,grpc linux安装-Go语言中文社区

1. go protobuf 安装Protoc Buffer 安装包下载地址:https://github.com/protocolbuffers/protobuf/releases/download/v3.9.0/protoc-3.9.0-linux-x86_64.zip(使用wget命令下载),最新版本可在此页面查看。下载完成后,解压。将解压出来的inclu…

《Objective-C基础教程》第二章 对C的扩展

.m代表message。编译工作由GCC(GNU Compiler Collection,GNU编译器集合)处理,可以理解C语言的全部3个变体。NS代码前缀表示来自Cocoa,苹果收购的NeXT Software公司开发的NextSTEP工具包。布尔类型BOOL具有YES和NO值,但使用8位存储…

阿里25k招.NET,要求WPF!

说到WPF、上位机,很多.NET开发者可能只是听过并不了解,然而随着工业4.0的火爆大势,当下.NET开发者又多了一个高薪选型,在各大招聘网站上都能找到5年经验25k左右的岗位,近日阿里对.NET的招聘,明确就要求的WP…