精华内容
下载资源
问答
  • 安全漏洞概念及分类

    万次阅读 2016-10-12 16:50:48
    本文是一个安全漏洞相关的科普,介绍安全漏洞的概念认识,漏洞在几个维度上的分类及实例展示。 安全漏洞及相关的概念 本节介绍什么是安全漏洞及相关的概况。 安全漏洞的定义 我们经常听到漏洞这个概念,可...
    本文是一个安全漏洞相关的科普,介绍安全漏洞的概念认识,漏洞在几个维度上的分类及实例展示。

    安全漏洞及相关的概念

    本节介绍什么是安全漏洞及相关的概况。

    安全漏洞的定义

    我们经常听到漏洞这个概念,可什么是安全漏洞?想给它一个清晰完整的定义其实是非常困难的。如果你去搜索一下对于漏洞的定义,基本上会发现高大上的学术界和讲求实用的工业界各有各的说法,漏洞相关的各种角色,比如研究者、厂商、用户,对漏洞的认识也是非常不一致的。  
    从业多年,我至今都找不到一个满意的定义,于是我自己定义一个:  

    安全漏洞是信息系统在生命周期的各个阶段(设计、实现、运维等过程)中产生的某类问题,这些问题会对系统的安全(机密性、完整性、可用性)产生影响。

    这是一个从研究者角度的偏狭义的定义,影响的主体范围限定在了信息系统中,以尽量不把我们所不熟悉的对象扯进来。

    漏洞之所以被描述为某种”问题”,是因为我发现无法简单地用脆弱性、缺陷和Bug等概念来涵盖它,而更象是这些概念的一个超集。    
    漏洞会在系统生命周期内的各个阶段被引入进来,比如设计阶段引入的一个设计得非常容易被破解加密算法,实现阶段引入的一个代码缓冲区溢出问题,运维阶段的一个错误的安全配置,这些都有可能最终成为漏洞。     
    定义对安全的影响也只涉及狭义信息安全的三方面:机密性、完整性和可用性。漏洞造成的敏感信息泄露导致机密性的破坏;造成数据库中的信息被非法篡改导致完整性的破坏;造成服务器进程的崩溃导致可用性的丧失。漏洞也可能同时导致多个安全属性的破坏。

    安全漏洞与Bug的关系

    漏洞与Bug并不等同,他们之间的关系基本可以描述为:大部分的Bug影响功能性,并不涉及安全性,也就不构成漏洞;大部分的漏洞来源于Bug,但并不是全部,它们之间只是有一个很大的交集。可以用如下这个图来展示它们的关系

    安全漏洞概念及分类

    已知漏洞的数量

    各个漏洞数据库和索引收录了大量已知的安全漏洞,下表是一个主流漏洞库的数量的大致估计,漏洞一般最早从20世纪90年代开始:

    漏洞条目库

    特点

    数量 URL
    SecurityFocus 全揭露,带POC >60000 http://www.securityfocus.com/bid/
    OSVDB 数量最大,索引丰富 >100000 http://www.osvdb.org/
    Secunia 产品分类细 >58000 http://secunia.com/community/advisories/
    ISS XForce 描述信息专业 >90000 http://xforce.iss.net/
    CVE 最全的索引 >60000 http://cve.mitre.org/cve/cve.html
    CNVD 国内的中文数据库 >60000 http://www.cnvd.org.cn/flaw/list.htm

    事实上,即便把未知的漏洞排除在外,只要订了若干漏洞相关的邮件列表就会知道:并不是所有漏洞数据库都会收录,就算把上面的所列的数据库中的所有条目加起来去重以后也只是收录了一部分的已知漏洞而已,实际的已知漏洞数比总收录的要高得多。

    安全漏洞的分类

    和其他事物一样,安全漏洞具有多方面的属性,也就可以从多个维度对其进行分类,重点关注基于技术的维度。注意,下面提到的所有分类并不是在数学意义上严格的,也就是说并不保证同一抽象层次、穷举和互斥,而是极其简化的出于实用为目的分类。

    基于利用位置的分类

    本地漏洞

    需要操作系统级的有效帐号登录到本地才能利用的漏洞,主要构成为权限提升类漏洞,即把自身的执行权限从普通用户级别提升到管理员级别。

    实例:

    Linux Kernel 2.6 udev Netlink消息验证本地权限提升漏洞( CVE-2009-1185 )

    攻击者需要以普通用户登录到系统上,通过利用漏洞把自己的权限提升到root用户,获取对系统的完全控制。

    远程漏洞

    无需系统级的帐号验证即可通过网络访问目标进行利用,这里强调的是系统级帐号,如果漏洞利用需要诸如FTP用户这样应用级的帐号要求也算是远程漏洞。   
    实例:

    -  Microsoft Windows DCOM RPC接口长主机名远程缓冲区溢出漏洞(MS03-026)(CVE-2003-0352)   
    攻击者可以远程通过访问目标服务器的RPC服务端口无需用户验证就能利用漏洞,以系统权限执行任意指令,实现对系统的完全控制。 

    基于威胁类型的分类

    获取控制

    可以导致劫持程序执行流程,转向执行攻击者指定的任意指令或命令,控制应用系统或操作系统。威胁最大,同时影响系统的机密性、完整性,甚至在需要的时候可以影响可用性。   
    主要来源:内存破坏类、CGI类漏洞

    获取信息

    可以导致劫持程序访问预期外的资源并泄露给攻击者,影响系统的机密性。   
    主要来源:输入验证类、配置错误类漏洞

    拒绝服务

    可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。   
    主要来源:内存破坏类、意外处理错误处理类漏洞。  

    基于技术类型的分类   

    基于漏洞成因技术的分类相比上述的两种维度要复杂得多,对于目前我所见过的漏洞大致归纳为以下几类:

    - 内存破坏类
    - 逻辑错误类
    - 输入验证类
    - 设计错误类
    - 配置错误类

    以下是对这几类漏洞的描述和实例分析。

    内存破坏类

    此类漏洞的共同特征是由于某种形式的非预期的内存越界访问(读、写或兼而有之),可控程度较好的情况下可执行攻击者指定的任意指令,其他的大多数情况下会导致拒绝服务或信息泄露。   
    对内存破坏类漏洞再细分下来源,可以分出如下这些子类型:

    - 栈缓冲区溢出
    - 堆缓冲区溢出
    - 静态数据区溢出
    - 格式串问题
    - 越界内存访问
    - 释放后重用
    - 二次释放
    栈缓冲区溢出

    最古老的内存破坏类型。发生在堆栈中的缓冲区溢出,由于利用起来非常稳定,大多可以导致执行任意指令,威胁很大。此类漏洞历史非常悠久, 1988年著名的Morris蠕虫传播手段之一就是利用了finger服务的一个栈缓冲区溢出漏洞。在2008年之前的几乎所有影响面巨大的网络蠕虫也基本利用此类漏洞,汇总情况可以见下表: 

    蠕虫 中文名号 MS 公告号  CVE ID 漏洞名
    Slammer 蠕虫王 MS02-056 CVE-2002-1123 Microsoft SQL Server预验证过程远程缓冲区溢出漏洞
    MSBlast 冲击波 MS03-026 CVE-2003-0352 Microsoft Windows DCOM RPC接口长主机名远程缓冲区溢出漏洞
    Sasser 震荡波 MS04-011 CVE-2003-0533 Microsoft Windows LSASS远程缓冲区溢出漏洞
    Conficker 飞客蠕虫 MS08-067 CVE-2008-4250 Microsoft Windows Server服务RPC请求缓冲区溢出漏洞

    上面表格里列出的蠕虫即使经过多年,在当前的互联网上还经常被捕捉到。   栈溢出漏洞是相对比较容易发现的漏洞,静态动态分析的方法对于此漏洞的挖掘已经相当成熟,因此这类漏洞,特别是服务端程序中,目前基本处于日渐消亡的状态。   实例:
    - 暴风影音stormtray进程远程栈缓冲区溢出漏洞
    长度检查不充分的串连接操作。

    安全漏洞概念及分类

    - Sun Solaris snoop(1M)工具远程指令执行漏洞( CVE-2008-0964 )

    无长度检查的*printf调用。

    安全漏洞概念及分类

    frameborder="0" allowtransparency="true" scrolling="no" vspace="0" hspace="0" style="position: static; display: block; padding: 0px; margin: 0px; border-style: none; vertical-align: baseline; width: 341px; height: 74px;">

    - Novell eDirectory HTTPSTK Web服务器栈溢出漏洞

    无长度检查的memcpy调用。

    安全漏洞概念及分类

    frameborder="0" allowtransparency="true" scrolling="no" vspace="0" hspace="0" style="position: static; display: block; padding: 0px; margin: 0px; border-style: none; vertical-align: baseline; width: 342px; height: 74px;">

    - FlashGet FTP PWD命令超长响应栈溢出漏洞

    安全漏洞概念及分类

    - Imatix Xitami If-Modified-Since头远程栈溢出漏洞。

    极其危险的sscanf类调用。

    安全漏洞概念及分类

    - Borland StarTeam Multicast服务用户请求解析远程栈溢出漏洞( CVE-2008-0311 )

    安全漏洞概念及分类

    - Microsoft DirectShow MPEG2TuneRequest 溢出漏洞( CVE-2008-0015 )

    手抖,缓冲区的指针被当做缓冲区本身被数据覆盖溢出。

    安全漏洞概念及分类

    堆缓冲区溢出

    导致堆缓冲区溢出的来源与栈溢出的一致,基本都是因为一些长度检查不充分的数据操作,唯一不同的地方只是发生问题的对象不是在编译阶段就已经确定分配的栈缓冲区,而是随着程序执行动态分配的堆块。   
    实例:
    - HP OpenView NNM Accept-Language HTTP头堆溢出漏洞( CVE-2009-0921)
    典型的先分配后使用的堆溢出问题。

    安全漏洞概念及分类

    PHP (phar extension)堆溢出漏洞

    堆溢出特有的溢出样式:由于整数溢出引发Malloc小缓冲区从而最终导致堆溢出。

    安全漏洞概念及分类

    静态数据区溢出

    发生在静态数据区BSS段中的溢出,非常少见的溢出类型。

    实例:

    - Symantec pcAnyWhere awhost32远程代码执行漏洞(CVE-2011-3478)

    安全漏洞概念及分类

    格式串问题

    在*printf类调用中由于没有正确使用格式串参数,使攻击者可以控制格式串的内容操纵*printf调用越界访问内存。此类漏洞通过静态或动态的分析方法可以相对容易地被挖掘出来,因此目前已经很少能够在使用广泛的软件中看到了。

    实例:

    - Qualcomm Qpopper 2.53格式串处理远程溢出漏洞(CVE-2000-0442)

    安全漏洞概念及分类

    想了解更多格式串漏洞的原理和利用,可以参考warning3在很早之前写的文档:

    *printf()格式化串安全漏洞分析 http://www.nsfocus.net/index.php?act=magazine&do=view&mid=533http://www.nsfocus.net/index.php?act=magazine&do=view&mid=534<喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoNj4NCgk8c3Ryb25nPtS9vefE2rTmt8POyjwvc3Ryb25nPjwvaDY+DQo8cD6zzNDyw6TEv9DFyM7AtNfUzajQxbbUt720q7XdtcTK/b7do6yyotLUtMvX986qxNq05rfDzsq1xMv30v2jrLv70M61xMr91rW1vNbC1L2957XExNq05rfDzsqjrNTss8nE2rTmxsa7tbvy0MXPotC5wrahoyZuYnNwOyAmbmJzcDs8YnIgLz4NCsq1wP2jujxiciAvPg0KLSBPcGVuU1NMIFRMU9DEzPjAqdW50K3S6bD81LazzNDFz6LQucK2wqm2tCAoQ1ZFLTIwMTQtMDE2MCk8YnIgLz4NCsKptrTKx9PJ09q9+LPMsru807zssum12Mq508PNqNDFttS2y8zhuam1xMr9vt3H+LOktsjWtaOssLTWuLaotcSzpLbItsHIocTatOa3tbvYo6y1vNbC1L2957fDzsq1vbTzv+m1xNSkxtrS1M3itcTE2rTmyv2+3bKit7W72KOs0LnCtrD8wKjTw7unw/uhor/awe6holNlc3Npb25JRMn11sHKx8u91L+1yNTaxNq1xMP0uNDQxc+ioaM8L3A+DQo8cD48aW1nIGFsdD0="安全漏洞概念及分类" src="/uploadfile/2014/0508/20140508110216384.png" style="display: block;" />

    释放后重用

    这是目前最主流最具威胁的客户端(特别是浏览器)漏洞类型,大多数被发现的利用0day漏洞进行的水坑攻击也几乎都是这种类型,每个月各大浏览器厂商都在修复大量的此类漏洞。技术上说,此类漏洞大多来源于对象的引用计数操作不平衡,导致对象被非预期地释放后重用,进程在后续操作那些已经被污染的对象时执行攻击者的指令。与上述几类内存破坏类漏洞的不同之处在于,此类漏洞的触发基于对象的操作异常,而非基于数据的畸形异常(通常是不是符合协议要求的超长或畸形字段值),一般基于协议合规性的异常检测不再能起作用,检测上构成极大的挑战。   
    实例:
    - Microsoft IE非法事件操作内存破坏漏洞(CVE-2010-0249)
    著名的Aurora攻击,涉嫌入侵包括Google在内的许多大互联网公司的行动,就使用了这个CVE-2010-0249这个典型的释放后重用漏洞。

    安全漏洞概念及分类

    二次释放

    一般来源于代码中涉及内存使用和释放的操作逻辑,导致同一个堆缓冲区可以被反复地释放,最终导致的后果与操作系统堆管理的实现方式相关,很可能实现执行任意指令。

    实例:

    - CVS远程非法目录请求导致堆破坏漏洞( CVE-2003-0015)

    安全漏洞概念及分类

    逻辑错误类

    涉及安全检查的实现逻辑上存在的问题,导致设计的安全机制被绕过。

    实例:

    - Real VNC 4.1.1验证绕过漏洞( CVE-2006-2369 )

    漏洞允许客户端指定服务端并不声明支持的验证类型,服务端的验证交互代码存在逻辑问题。

    安全漏洞概念及分类

    安全漏洞概念及分类

    Android应用内购买验证绕过漏洞

    Google Play的应用内购买机制的实现上存在的漏洞,在用户在Android应用内购买某些数字资产时会从Play 市场获取是否已经付费的验证数据,对这块数据的解析验证的代码存在逻辑问题,导致攻击者可以绕过验证不用真的付费就能买到东西。验证相关的代码如下:

    安全漏洞概念及分类

    代码会先检查回来的数据签名是否为空,不空的话检查签名是否正确,如果不对返回失败。问题在于如果签名是空的话并没有对应的else逻辑分支来处理,会直接执行最下面的return true操作,导致的结果是只要返回的消息中签名为空就会返回验证通过。

    输入验证类

    漏洞来源都是由于对来自用户输入没有做充分的检查过滤就用于后续操作,绝大部分的CGI漏洞属于此类。所能导致的后果,经常看到且威胁较大的有以下几类:  

    - SQL注入
    - 跨站脚本执行
    - 远程或本地文件包含
    - 命令注入
    - 目录遍历
    SQL注入

    Web应用对来自用户的输入数据未做充分检查过滤,就用于构造访问后台数据库的SQL命令,导致执行非预期的SQL操作,最终导致数据泄露或数据库破坏。   
    实例:
    - 一个网站Web应用的数值参数的SQL注入漏洞。

    安全漏洞概念及分类

    跨站脚本执行(XSS)

    Web应用对来自用户的输入数据未做充分检查过滤,用于构造返回给用户浏览器的回应数据,导致在用户浏览器中执行任意脚本代码。   
    实例: YouTube上的一个存储式XSS漏洞。

    安全漏洞概念及分类

    远程或本地文件包含

    安全漏洞概念及分类安全漏洞概念及分类

    如果Web应用支持在URL参数中指定服务器上的一个文件执行一些处理,对来自客户端URL数据及本地资源的访问许可如果未做充分的检查,攻击者可能通过简单的目录遍历串使应用把Web主目录以外的系统目录下的文件包含进来,很可能导致信息泄露。   
    实例:
    - 一个网站存在的本地文件包含的漏洞

    安全漏洞概念及分类

    命令注入

    涉及系统命令调用和执行的函数在接收用户的参数输入时未做检查过滤,或者攻击者可以通过编码及其他替换手段绕过安全限制注入命令串,导致执行攻击指定的命令。   实例:
    - AWStats 6.1及以下版本configdir变量远程执行命令漏洞( CVE-2005-0116 )
    典型的由于Perl语言对文件名特性的支持加入未充分检查用户输入的问题,导致的命令注入漏洞,awstats.pl的1082行:if (open(CONFIG,”$searchdir$PROG.$SiteConfig.conf”)) 。

    安全漏洞概念及分类

    目录遍历

    涉及系统用于生成访问文件路径用户输入数据时未做检查过滤,并且对最终的文件绝对路径的合法性检查存在问题,导致访问允许位置以外的文件。多见于CGI类应用,其他服务类型也可能存在此类漏洞。

    实例:

    -  Novell Sentinel Log Manager “filename”参数目录遍历漏洞( CVE-2011-5028 )

    http://www.example.com/novelllogmanager/FileDownload?filename=/opt/novell/sentinel_log_mgr/3rdparty/tomcat/temp/../../../../../../etc/passwd

    -  HP Data Protector Media Operations DBServer.exe目录遍历漏洞

    在HP Data protecetor Media Operations的客户端连接服务端时,通过私访有的通信协议,客户端会首先检查[系统分区]:/Documents and Settings/[用户名]/Application Data下面是否有相应的资源(如插件等),如果没有,则会向服务器请求需要的文件,服务器没有验证请求的文件名的合法性,而且这个过程不需要任何验证,攻击者精心构造文件名,可以读取服务端安装目录所在分区的任意文件。

    安全漏洞概念及分类

    - RHINOSOFT SERV-U FTP SERVER远程目录遍历漏洞

    安全漏洞概念及分类

    Caucho Resin远程目录遍历漏洞

    安全漏洞概念及分类

    设计错误类

    系统设计上对安全机制的考虑不足导致的在设计阶段就已经引入的安全漏洞。

    实例:

    -  LM HASH算法脆弱性

    安全漏洞概念及分类

    这个算法至少存在以下3方面的弱点:

    1、口令转换为大写极大地缩小了密钥空间。
    2、切分出的两组数据分别是独立加密的,暴力破解时可以完全独立并行。
    3、不足7字节的口令加密后得到的结果后半部分都是一样的固定串,由此很容易判定口令长度。

    这些算法上的弱点导致攻击者得到口令HASH后可以非常容易地暴力猜测出等价的明文口令。

     -   Microsoft Windows图形渲染引擎WMF格式代码执行漏洞(MS06-001) (CVE-2005-4560)

        如果一个WMF文件的StandardMetaRecord中,Function 被设置为 META_ESCAPE而Parameters[0] 等于SETABORTPROC,PlayMetaFileRecord()就会调用Escape()函数,Escape()调用SetAbortProc()将自己的第四形参设置为一个回调函数,把图像文件中包含的一个数据块象Shellcode那样执行。此漏洞从Windows 3.1一直影响到2003,攻击者只要让用户处理恶意的WMF文件(通过挂马或邮件)在用户系统上执行任意指令,漏洞实在是太好用影响面太大了,以至有人认为这是一个故意留的后门,其实影响设计的功能是处理打印任务的取消,功能已经被废弃,但废弃的代码并没有移除而导致问题。

      – 搜狐邮箱密码找回功能

        密码找回功能在要求用户提供找回密码需要的问题答案时,在返回给用户的页面中就已经包含了答案,只要通过查看页面源码就能看到,使这个找回密码功能的安全验证完全形同虚设,攻击者由此可以控制任意邮箱。之所以这么设计,可能就是为了尽可能地少对数据库的查询,而把用户帐号安全根本不放在心上。

    安全漏洞概念及分类

      – 紫光输入法用户验证绕过漏洞

    这是类似于2000年微软输入法漏洞的例子,通过访问输入法设置的某些功能绕过操作系统的用户验证执行某些操作。

    安全漏洞概念及分类

    配置错误类

    系统运维过程中默认不安全的配置状态,大多涉及访问验证的方面。

    实例:

      – JBoss企业应用平台非授权访问漏洞( CVE-2010-0738 )

    对控制台访问接口的访问控制默认配置只禁止了HTTP的两个主要请求方法GET和POST,事实上HTTP还支持其他的访问方法,比如HEAD,虽然无法得到的请求返回的结果,但是提交的命令还是可以正常执行的。

    安全漏洞概念及分类

    展开全文
  • 数据集分类平衡的影响与处理

    千次阅读 2020-05-14 23:26:21
    本文介绍了机器学习、深度学习建模时,分类平衡的影响和处理方法。


    不平衡分类对预测建模提出了挑战,因为用于分类的大多数机器学习算法都是围绕每个类别的样本数量均相等的假设来设计的。这导致模型的预测性能较差,特别是针对样本较少类别的预测。这是构建数据集需要考虑的一个问题,通常数量较少的类别更重要,因为与数量较多的类别来说,模型对样本较少的分类错误更为敏感。


    1. 分类预测建模

    分类问题是预测建模问题,涉及为每个观察值分配一个类别标签。分类模型会生成预测的类别,输出是离散的值。对于大多数实际应用,模型会通过softmax函数输出每一个类别的概率,然后选取置信度(概率)最大的类别输出。

    当描述问题时,预测建模问题的类别数通常是固定的,并且类别数通常不会改变。与回归模型一样,分类模型会产生连续值的预测,该预测通常以概率的形式出现(即,任何单个样本的类成员的预测值在0到1之间,且总和为1)。

    在处理分类预测建模问题时,必须收集训练数据集。分类问题中的数据由样本和标签组成。训练数据集是来自领域的许多示例,包括输入数据(例如,测量值)和输出数据(例如,类别标签)。训练数据集用于更好地理解输入数据,以帮助最佳地进行建模准备。它还用于评估一组不同的建模算法。它用于调整所选模型的超参数。最后,训练数据集用于在所有可用数据上训练最终模型,可以使用这些模型对新的数据进行预测。


    2. 不平衡分类

    属于每个类别的示例的数量称为类别分布。不平衡分类是指分类预测建模问题,其中训练数据集中每个类标签的示例数不平衡。也就是说,数据集中,每类样本的数量不相等。当一个或多个类别在训练数据中所占的比例低于其它类别时,就会出现不平衡。

    描述数据集中类的不平衡的另一种方法是将类分布总结为训练数据集的百分比。例如,不平衡的多类分类问题可能在第一类中有80%的示例,在第二类中有18%的示例,在第三类中有2%的示例。


    3. 分类失衡的原因

    不平衡的分类预测建模问题中类分布的不平衡可能有很多原因。导致失衡的两个主要原因,分别是数据采样和属性。跨类别的示例中的不平衡可能是由于从问题域中收集或采样示例的方式引起的。这可能涉及在数据收集过程中引入的偏差,以及在数据收集过程中发生的错误。比如偏差采样和测量误差。

    例如,示例可能是从狭窄的地理区域或某个时间段收集的,而类别的分布可能完全不同,甚至可能以不同的方式收集。

    收集观测值时可能会出错。一种错误类型可能是将错误的类标签应用于许多示例。或者,从中收集示例的过程或系统可能已损坏或受损,从而导致不平衡。

    通常,在不平衡是由采样偏差或测量误差引起的情况下,可以通过改进的采样方法或校正测量误差来校正不平衡。这是因为训练数据集不能正确的表示要解决的问题域。


    4. 分类失衡的挑战

    分类不平衡因问题而异。分类问题可能存在轻微的不平衡或者会存在严重的失衡,比如其中一个类中可能有数百或数千个示例,而另一类中可能有数十个示例。

    轻微失衡:一个不平衡的分类问题,其中样本的分布在训练数据集中很少(例如4:6)。
    严重失衡:在训练数据集中大量的示例分布不均匀的不平衡分类问题(例如1:100或更多)。

    现在大多数分类失衡的数据集都集中在1:4至1:100的失衡比率上。在欺诈检测或化学信息学等现实应用中,可能会处理不平衡率从1:1000到1:5000的问题。轻微的不平衡通常不是问题,并且可以像正常分类预测建模问题一样对待。严重不平衡可能很难建模,需要使用专门的技术。

    具有大量示例的一个或多个类称为主要或多数类,而具有少量示例(通常只有一个)的类称为次要或少数类。当处理分类不平衡问题时,通常最关注样本数较少的类别。这意味着模型正确预测少数样本的类别标签的能力比多数样本更为重要。

    少数派类别很难预测,因为按照定义,此类类别的例子很少。这意味着模型要学习此类中的示例的特征,并将此类中的示例与多数类(或多个类)区分开来更具挑战性。

    针对分类预测模型的大多数机器学习算法都是在假设类均等分布的问题上进行设计和演示的。这意味着模型可能只专注于学习大量观测的特征,而忽略了少数类别中实际上更受关注且其预测更有价值的示例。大多数分类算法的学习过程通常偏向多数类示例,因此少数类算法无法很好地建模到最终系统中。

    尽管在过去的二十年中,人们在学习失衡方面做了大量工作,但现有方法和问题仍有许多缺点有待解决。


    5. 分类失衡的例子

    下面列出了该问题领域的十个示例,其中示例的类分布固有地不平衡。

    • 欺诈识别。
    • 索赔预测
    • 默认预测。
    • 流失预测。
    • 垃圾邮件检测。
      异常检测。
    • 离群值检测。
    • 入侵检测
    • 转换预测。

    实例列表阐明了不平衡分类预测建模的性质。

    这些问题领域中的每一个都代表了整个研究领域,每个领域中的特定问题都可以作为不平衡的分类预测建模加以构架和探索。这凸显了类不平衡分类的多学科性质,以及为什么对于机器学习从业者来说,意识到这一问题并熟练地解决这一问题如此重要。


    6.解决方法

    算法方法:机器学习算法对假阳性和假阴性的惩罚相同。一种应对方法是修改算法本身,以提高少数群体类别的预测性能。这可以通过基于识别的学习或成本敏感的学习来执行。 Drummond & Holte (2003); Elkan (2001); Manevitz & Yousef (2001)

    数据方法:包括对数据进行重新采样以减轻类不平衡导致的影响。数据方法更灵活并允许使用最新算法,因此已在实践中广为接受。两种最常见的技术是过采样和欠采样。

    • 过采样,会增加训练集中少数群体成员的数量。过采样的优点是不会保留原始训练集中的信息,因为会保留少数和多数类别的所有观察结果。另一方面,它容易过度拟合。

    • 欠采样,与过采样相反,旨在减少多数样本的数量来平衡类分布。由于它正在从原始数据集中删除观察结果,因此可能会丢弃有用的信息。
      在这里插入图片描述
      之前一篇文章中介绍了设置class_weight实现类别的平衡的方法。此外还常使用过采样和欠采样方法。常用的方法有:

    • EditedNearestNeighbours欠采样技术(E2_ENN)

    • NearMiss 3 欠采样技术(E3_NM)

    • SMOTE过采样技术(E4_SMT)

    • ADASYN过采样技术(E5_ADS)

    • EditedNearestNeighbours & “Balanced” class_weight (E6_ENN)

    • NearMiss 3 & “Balanced” class_weight (E7_NM)

    • SMOTE & “Balanced” class_weight (E8_SMT)

    • ADASYN & “Balanced” class_weight (E9_ADS)


    7. 混淆矩阵,精度,召回率和F1分数

    在这里插入图片描述
    一类的F1分数为精度(查准率,precision)和查全率(召回率,recall)的调和平均值(2×精度×查全率/(精度+查全率))

    **对于给定的类,召回率和精度的不同组合具有以下含义:

    • 高召回率+高精度:模型可以完美地处理类
    • 召回率低+精度高:该模型无法很好地检测到类别,但在进行分类时是高度可信赖的
    • 召回率高+精度低:可以很好地检测类别,但是模型中也包含其他类别的点
    • 召回率低+精度低:模型处理不佳**

    https://link.springer.com/article/10.1007/s13748-016-0094-0
    https://medium.com/james-blogs/handling-imbalanced-data-in-classification-problems-7de598c1059f
    https://machinelearningmastery.com/what-is-imbalanced-classification/
    https://towardsdatascience.com/handling-imbalanced-datasets-in-machine-learning-7a0e84220f28

    展开全文
  • 针对不平衡数据流的分类问题...理论分析与实验验证表明,该集成分类器具有更低的计算复杂度,更能适应存在概念漂移的不平衡数据流挖掘分类,其整体分类性能优于基于权重的集成分类器模型,能明显提升少数类的分类精度.
  • 平衡分类问题

    千次阅读 2019-05-27 11:03:41
    准确率不适合数据不平横的情况 --------------------- 原文:https://blog.csdn.net/qq_37695697/article/details/85069169 以上图像为ROC曲线(receiver operatingcharacteristic curve):在不平衡数据分类中最...

    TP:正确肯定——实际是正例,识别为正例

    FN:错误否定(漏报)——实际是正例,却识别成了负例

    FP:错误肯定(误报)——实际是负例,却识别成了正例

    TN:正确否定——实际是负例,识别为负例

    假设有10个人 8个好人和2个坏人
    如果存在一个机器学习模型,遇到人就说好人,那么模型的预测结果将会是 好人, 好人, ......

    利用准确率的计算方式 ACC = 8个好人预测正确/总共有10个人 = 0.8 得这个机器模型的预测准确率为80%
    有没有感觉很奇怪,我猜硬币才只有50%正确率,怎么这个模型只说好人,准确率这么高的?
    而且,这个模型是不是不能够识别坏人?

    准确率是非常直观的度量指标,也是我们接触的最多的,不过在对付数据不平衡的问题下,准确率就难以反映真实情况。

    准确率,在二分类任务中,因为总共只有好或者坏,所以 准确率 = 准确预测好人的能力 + 准确预测坏人的能力

    不知道大家有没有发现,虽然不能够识别坏人,但是准确预测好人的能力这个可以拉分,只要好人多过坏人,那么我就可以保证我的预测能力大于50%,如果全是好人,那么我的准确率就100%。准确率就是这么被直接拉高了。因为在数据不平衡的情况下,预测好人的能力的占比可能大于一半,从而掩盖了预测坏人能力比较弱的事实。

    这就是为什么在数据不平衡的情况下,准确率无法体现模型的真实水平。
    不过还是有多人直接在数据不平衡下用准确率作为指标,在某些准确率高达95,96%的实验结果上,连样本数据都是不平横的。这样的准确率是无意义的。

    其实原因有两个 1. 数据不平衡 2. 准确率不适合数据不平横的情况
    --------------------- 原文:https://blog.csdn.net/qq_37695697/article/details/85069169 
     


    以上图像为ROC曲线(receiver operatingcharacteristic curve):在不平衡数据分类中最常用的指标之一

    正样本为少数类,负样本为多数类。

    纵轴为召回率:正样本中有多少被识别为正样本了。

    横轴为负样本中有多少被识别为正样本了

    每个阈值的识别结果对应一个点(FPR,TPR),当阈值最大时,所有样本都被识别成正样本,对应于左下角的点(0,0),当阈值最小时,所有样本都被识别成负样本,对应于右上角的点(1,1),随着阈值从最大变化到最小,识别为正样本的可能性变大;随着阈值从最小变化到最大,将负样本识别为正样本的可能性变小;

    ROC(Receiver Operating Characteristic)curve is recognized as the most rational choice for imbalanced data.

    要生成一个ROC曲线,只需要真阳性率(TPR)和假阳性率(FPR)。TPR决定了一个分类器或者一个诊断测试在所有阳性样本中能正确区分的阳性案例的性能.而FPR是决定了在所有阴性的样本中有多少假阳性的判断. ROC曲线中分别将FPR和TPR定义为x和y轴,这样就描述了真阳性(获利)和假阳性(成本)之间的博弈.而TPR就可以定义为灵敏度,而FPR就定义为1-特异度,因此ROC曲线有时候也叫做灵敏度和1-特异度图像.每一个预测结果在ROC曲线中以一个点代表. 
    有了ROC曲线后,可以引出AUC的含义:ROC曲线下的面积(越大越好,1为理想状态)
    -------原文:https://blog.csdn.net/xyz1584172808/article/details/81839230 

    我给出的答案是 AUC是指 随机给定一个正样本和一个负样本,分类器输出该正样本为正的那个概率值 比 分类器输出该负样本为正的那个概率值 要大的可能性。

    如何计算AUC?

    计算AUC时,推荐2个方法。

    方法一:

    在有M个正样本,N个负样本的数据集里。一共有M*N对样本(一对样本即,一个正样本与一个负样本)。统计这M*N对样本里,正样本的预测概率大于负样本的预测概率的个数。

    ,其中, 

     

     

    这样说可能有点抽象,我举一个例子便能够明白。

     

     

    ID label pro
    A 0 0.1
    B 0 0.4
    C 1 0.35
    D 1 0.8

    假设有4条样本。2个正样本,2个负样本,那么M*N=4。即总共有4个样本对。分别是:

    (D,B),(D,A),(C,B),(C,A)。

    在(D,B)样本对中,正样本D预测的概率大于负样本B预测的概率(也就是D的得分比B高),记为1

    同理,对于(C,B)。正样本C预测的概率小于负样本C预测的概率,记为0.

    最后可以算得,总共有3个符合正样本得分高于负样本得分,故最后的AUC为 

    在这个案例里,没有出现得分一致的情况,假如出现得分一致的时候,例如:

     

    ID label pro
    A 0 0.1
    B 0 0.4
    C 1 0.4
    D 1 0.8


    同样本是4个样本对,对于样本对(C,B)其I值为0.5。

    最后的AUC为 

    方法二:

    另外一个方法就是利用下面的公式:

     

    这个公式看起来有点吓人,首先解释一下每一个符号的意思:

    公式的含义见: 公式解释

     

    ,代表第i条样本的序号。(概率得分从小到大排,排在第rank个位置)

    分别是正样本的个数和负样本的个数

    只把正样本的序号加起来。

     

    同样本地,我们用上面的例子。

     

    ID label pro
    A 0 0.1
    B 0 0.4
    C 1 0.35
    D 1 0.8

     将这个例子排序。按概率排序后得到:

     

    ID label pro rank
    A 0 0.1 1
    C 1 0.35 2
    B 0 0.4 3
    D 1 0.8 4


    按照上面的公式,只把正样本的序号加起来也就是只把样本C,D的rank值加起来后减去一个常数项 

     

    即: ,这个答案和我们上面所计算的是一样的。

     

    这个时候,我们有个问题,假如出现得分一致的情况怎么办?下面举一个例子说明:

     

     

    ID label pro
    A 1 0.8
    B 1 0.7
    C 0 0.5
    D 0 0.5
    E 1 0.5
    F 1 0.5
    G 0 0.3


    在这个例子中,我们有4个取值概率为0.5,而且既有正样本也有负样本的情况。计算的时候,其实原则就是相等得分的rank取平均值。具体来说如下:

    先排序:

    ID label pro rank
    G 0 0.3 1
    F 1 0.5 2
    E 1 0.5 3
    D 0 0.5 4
    C 0 0.5 5
    B 1 0.7 6
    A 1 0.8 7


    这里需要注意的是:相等概率得分的样本,无论正负,谁在前,谁在后无所谓。

     

    由于只考虑正样本的rank值:

    对于正样本A,其rank值为7

    对于正样本B,其rank值为6

    对于正样本E,其rank值为(5+4+3+2)/4

    对于正样本F,其rank值为(5+4+3+2)/4

     

    最后我们得到:

    展开全文
  • 在这篇文章中我们主要关注不平衡分类问题,特别地,我们主要关注类别极端不平衡场景下的二分类问题所面临的困难。 在这篇文章中我们将: 描述类别不平衡的定义与实际应用场景 给出不平衡场景下常用的评价...

    640?wx_fmt=png

    特约作者 : 刘芷宁

    不平衡学习是机器学习问题的一个重要子域,其主要关注于如何从类别分布不均衡的数据中学习数据的模式。在这篇文章中我们主要关注不平衡分类问题,特别地,我们主要关注类别极端不平衡场景下的二分类问题所面临的困难。

    在这篇文章中我们将:

    • 描述类别不平衡的定义与实际应用场景

    • 给出不平衡场景下常用的评价指标

    • 讨论不平衡场景下分类器学习困难的来源

    • 概览已有的不平衡学习方法并分析其优劣

    • 给出一些直觉的可视化来帮助理解不平衡学习过程

    • 给出一些场景/模型选择中的个人经验

    为简洁起见,文中出现的Min代表少数类样本(正类,positive,y=1),Maj代表多数类样本(负类,negative,y=0)

    问题概述:

    当一个分类任务的数据集中来自不同类别的样本数目相差悬殊时,我们通常称该数据集为“类别不平衡”的。以一个现实任务为例:在点击率预估(click-through rate prediction)任务中,每条展示给用户的广告都产生一条新样本,而用户最终是否点击了这条广告决定了样本的标签。显然,只有很少一部分的用户会去点击网页里的嵌入广告,这就导致最终得到的训练数据集中正/负例样本的数量差距悬殊。同样的情况也发生在很多实际应用场景中,如金融欺诈检测(正常/欺诈),医疗辅助诊断(正常/患病),网络入侵检测(正常连接/攻击连接)等等[1,2,3]。 需要注意的是,尽管少数类的样本个数更少,表示的质量也更差,但其通常会携带更重要的信息,因此一般我们更关注模型正确分类少数类样本的能力。

    分类问题的一个underlying assumption是各个类别的数据都有自己的分布,当某类数据少到难以观察结构的时候,我们可以考虑抛弃该类数据,转而学习更为明显的多数类模式,而后将不符合多数类模式的样本判断为异常/少数类,某些时候会有更好的效果。此时该问题退化为异常检测(anomaly detection)问题。

    有关异常检测 (Anomaly detection)
    Anomaly detection 除数值分析类方法外,同样有一系列的经典方法;如One-class SVM 及其派生的One-class NN,Isolation Forest,以及一系列Auto Encoder-Decoder based methods (One class NN 某种意义上也属于此类)。 由于只关心多数类的分布,这些方法一般为unsupervised / weakly-supervised,只使用单类别数据训练。

    基本符号:

    在二元不平衡分类中,数据集中只存在两个类别:少数类,即样本数量较少的类,与多数类,即样本数量相对较多的类别。我们使用D来表示全部训练数据样本的集合,每一个样本用(x, y)表示,其中 y ∈ {0, 1}。在二分类条件下,y取值为1代表该样本属于正类(少数类),为0则代表该样本属于负类(多数类)。

    由此我们可以定义少数类集合:

    640?wx_fmt=svg ‘

    及多数类集合:

    640?wx_fmt=svg

    从而有:

    640?wx_fmt=svg

    由此,对于(高度)不平衡的数据集我们有 640?wx_fmt=svg 。为了以统一的形式描述不同数据集的不平衡程度,我们定义不平衡比IR(Imbalance Ratio)为多数类样本数量与少数类样本数量的比值:

    640?wx_fmt=svg

    模型评价准则:

    对于一般的机器学习方法,最常见的评价指标无疑是分类准确度ACC (accuracy),ACC的含义非常直观并且在通常情况下都很有效。然而对于不平衡的分类任务,ACC并不能很好地反映分类器的性能。考虑以下情况:一个含有10000条样本的数据集,其中 640?wx_fmt=svg 。此时一个将所有样本都判断成多数类样本的分类器能够获得99%的分类准确率,这是一个相当高的分数,但给一个完全无法区分出少数类样本的分类器如此高的分数显然是不合理的。由于ACC等传统评价指标的特性,在数据分布不平衡时其往往会导致分类器的输出倾向于在数据集中占多数的类别:输出多数类会带来更高的分类准确率,但在我们所关注的少数类中表现不佳。

    类别不平衡问题有一些更加合理的评价准则,这些指标通常是基于真正例TP/真负例TF/假正例FP/假负例FN的个数计算的。在二分类场景下,上述四种样本的数量可以通过计算混淆矩阵得到(见下表)。

    640?wx_fmt=jpeg

    二分类问题的混淆矩阵(Confusion Matrix)

    基于混淆矩阵我们可以使用准确率(Precision)和召回率(Recall)来评价模型在不平衡数据上的分类精度。F-score(F1)和G-mean(GM)是准确率和召回率的调和平均值 [4,5]。MCC [6](Matthews correlation coefficient,即马修斯相关系数)考虑了各种样本的个数,是一个在类别平衡或不平衡下都可使用的评价指标。 AUCPRC [7](Area Under Curve of Precision-Recall Curve)指准确率-召回率曲线下的面积。这些评价准则不会被不同类别中样本的数量所影响,因此通常被认为是“无偏的”,可以在类别不平衡的场景下使用。

    • 640?wx_fmt=svg

    • 640?wx_fmt=svg

    • 640?wx_fmt=svg

    • 640?wx_fmt=svg

    • 640?wx_fmt=svg

    • 640?wx_fmt=svg

    需要注意的是一个常用的评价指标AUCROC(Area Under Receiver-Operator Characteristic curve)其实是有偏的,它不适用于不平衡场景下的模型评估[7]。

    Receiver Operator Characteristic (ROC) curves are commonly used to present results for binary decision problems in machine learning. However, when dealing with highly skewed datasets, Precision-Recall (PR) curves give a more informative picture of an algorithm's performance.

    -- Davis J, et al. The Relationship Between Precision-Recall and ROC Curves, ICML 2006

    不平衡场景下学习困难的来源:

    通常情况下,类别不平衡程度越高,数据集的分类难度越大。但在一些工作中,发现存在某些高度不平衡的数据集,在这些数据集上不加任何修改的标准学习模型(如,SVM,Decision Tree等)仍能得到很好的分类结果。显然,类别不平衡本身并不是分类困难的来源,其背后的原因需要对数据分布以及模型在训练过程中的行为进行更细致的观察。

    一些研究工作尝试说明不平衡数据集上分类困难的本质原因,这些工作认为分类困难的原因来自于数据分布中的一些本质因素。如,

    • 过多的少数类样本出现在多数类样本密集的区域 [8]

    • 类别之间的分布严重重叠(即不同类别的样本相对密集地出现在特征空间的同一区域)[8]

    • 数据中本身存在的噪声,尤其是少数类的噪声 [9]

    • 少数类分布的稀疏性(sparsity)以及稀疏性导致的拆分多个子概念(sub-concepts,可理解为子clusters)并且每个子概念仅含有较少的样本数量 [10]

    因素4又被称为small disjuncts问题。它导致分类困难的原因很直观:在同样的特征空间中,相比于只有一个cluster的简单少数类分布,具有多个子概念的少数类分布需要模型给出更复杂的决策边界来获得良好的预测。在模型复杂度不变的情况下,分类性能会因子概念个数的增多而变差。因此该问题的解决办法也较为简单:上更大容量的模型(DL: 更宽,更深,更强)。

    至于因素1、2、3,我个人认为尽管三者的成因不同,这三个因素为学习带来的困难本质上是一样的。抛开数据集本身所带有的噪声因素来考虑。因素2,类别之间的分布严重重叠,所造成的结果即过多的少数类样本出现在多数类样本密集的区域(因素3,这话反过来说也合理)。而这些嵌入在多数类样本密集区域的少数类样本即我们通常说的离群点。以我个人而言,在不平衡分类任务中,离群点和噪声点所起到的作用没有本质上的区别。因此我们将因素1、2、3都归因为一个因素:噪声。

    另外,在实际的工业应用当中,这些难度因素还会与其他实际问题一同出现,如特征中的缺失值,巨大的数据集规模等。

    640?wx_fmt=jpeg

    图1:在不同程度的类别不平衡下,分布重叠/不重叠的两个数据集。数据硬度指分类器训练完成后输出概率与ground truth label的残差(i.e., |F(x)-y|)

    最后在图1中我们给出一个直观的可视化来帮助理解类别不平衡比/类别分布重叠之间的关系:即使不平衡比相同,类别重叠/不重叠的数据集也会表现出极其不同的分类难度。深蓝色的点代表它们可以被模型很好地分类,而深红色的样本点代表模型完全无法正确分类这些数据点。

    在图1(a)中,数据集是用两个不重叠的的二维高斯分布生成的。我们可以观察到不平衡比的增长并不会影响分类该数据集的难度(图1(c))。而在图1(b)中,数据集由两个相互重叠的二维高斯混合分布生成。随着不平衡比的增加,它从一个相对简单的分类任务变成了一个极其困难的任务(图1(d))。

    已有的不平衡学习方法概览:

    标准机器学习算法假设属于不同类别的样本数量大致相似。因此类别的不均匀分布给在不平衡数据集上应用标准学习算法带来了困难:这些学习算法的设计背后隐含的优化目标是数据集上的分类准确度,而这会导致学习算法在不平衡数据上更偏向于含更多样本的多数类。多数不平衡学习(imbalance learning)算法都是为了解决这种“对多数类的偏好”而提出。

    我将已有的不平衡学习算法划分为3类:数据级方法,算法级方法以及集成方法

    • 数据级方法

    数据级方法是不平衡学习领域发展最早、影响力最大、使用最广泛的一类方法,也可称为重采样方法。该类方法关注于通过修改训练数据集以使得标准学习算法也能在其上有效训练。根据实现方式的不同,数据级方法可被进一步分类为:

    1. 从多数类别中删除样本的方法(欠采样,如RUS、NearMiss[11]、ENN[12]、Tomeklink[13]等)
    2. 为少数类别生成新样本的方法(过采样,如SMOTE[14],ADASYN[15],Borderline-SMOTE[16]等)
    3. 结合上述两种方案的混合类方法(过采样+欠采样去噪,如SMOTE+ENN[17]等)

    标准的随机重采样方法使用随机方法来选择用于预处理的目标样本。然而随机方法可能会导致丢弃含有重要信息的样本(随机欠采样)或者引入无意义的甚至有害的新样本(随机过采样),因此有一系列更高级的方法,试图根据根据数据的分布信息来在进行重采样的同时保持原有的数据结构。

    Strength: 
    1. 该类方法能够去除噪声/平衡类别分布:在重采样后的数据集上训练可以提高某些分类器的分类性能。
    2. 欠采样方法减小数据集规模:欠采样方法会去除一些多数类样本,从而可能降低模型训练时的计算开销。

    Weakness: 
    1. 采样过程计算效率低下:这一系列的“高级”重采样方法通常使用基于距离的邻域关系(通常是k-最近邻方法)来提取数据分布信息。该方式的缺点是需要计算每个数据样本之间的距离,而计算距离需要的计算量随着数据集的大小呈平方级增长,因此在大规模数据集上应用这些方法可能会带来极低的计算效率。
    2. 易被噪声影响:此外在具有高不平衡比且包含大量噪声的工业数据集中,少数类的结构可能并不能被样本的分布很好地表示。而被这些重采样方法用来提取分布信息的最近邻算法很容易被噪声干扰,因此可能无法得到准确的分布信息,从而导致不合理的重采样策略。
    3. 过采样方法生成过多数据:当应用于大规模且高度不平衡的数据集时,过采样类的方法可能会生成大量的少数类样本以平衡数据集。这会进一步增大训练集的样本数量,增大计算开销,减慢训练速度,并可能导致过拟合。
    4. 不适用于无法计算距离的复杂数据集:最重要的一点是这些重采样方法依赖于明确定义的距离度量,使得它们在某些数据集上不可用。在实际应用中,工业数据集经常会含有类别特征(即不分布在连续空间上的特征,如用户ID)或者缺失值,此外不同特征的取值范围可能会有巨大的差别。在这些数据集上定义合理的距离度量十分困难。

    • 算法级方法

    算法级方法专注于修改现有的标准机器学习算法以修正他们对多数类的偏好。在这类方法中最流行的分支是代价敏感学习[18,19](cost-sensitive learning),我们在此也只讨论该类算法。代价敏感学习给少数类样本分配较高的误分类代价,而给多数类样本分配较小的误分类代价。通过这种方式代价敏感学习在学习器的训练过程中人为提高了少数类别样本的重要性,以此减轻分类器对多数类的偏好。

    Strength: 
    1. 不增加训练复杂度:使用该类算法魔改后的算法通常会有更好的表现,并且没有增加训练的计算复杂度。
    2. 可直接用于多分类问题:该类算法通常只修改误分类代价,因此可直接扩展到多分类问题上。

    Weakness: 
    1. 需要领域先验知识:必须注意的是,代价敏感学习中的代价矩阵(cost matrix)需要由领域专家根据任务的先验知识提供,这在许多现实问题中显然是不可用的。因此在实际应用时代价矩阵通常被直接设置为归一化的不同类别样本数量比。由于缺乏领域知识的指导,这种擅自设置的代价矩阵并不能保证得到最优的分类性能。
    2. 不能泛化到不同任务:对于特定问题设计的代价矩阵只能用于该特定任务,在其他任务上使用时并不能保证良好的性能表现。
    3. 依赖于特定分类器:另一方面,对于诸如神经网络的需要以批次训练(mini-batch training)方法训练的模型,少数类样本仅仅存在于在很少的批次中,而大部分批次中只含有多数类样本,这会给神经网络训练带来灾难性的后果:使用梯度下降更新的非凸优化过程会很快陷入局部极值点/鞍点(梯度为0),导致网络无法进行有效学习。使用敏感代价学习来给样本加权并不能解决这个问题。

    • 集成学习方法

    集成学习类方法专注于将一种数据级或算法级方法与集成学习相结合,以获得强大的集成分类器。由于其在类别不平衡任务中表现出色,在实际应用中集成学习越来越受欢迎。它们中的大多数基于某种特定的集成学习算法(例如,Adaptive Boosting [20])并在集成的过程中嵌入一种其他的不平衡学习方法(例如,SMOTE[14])。

    e.g., SMOTE+Boosting=SMOTEBoost [21]; SMOTE+Bagging=SMOTEBagging [22];

    另有一些集成学习方法的基学习器也是集成学习器(例如,EasyEnsemble,BalanceCascade[23])。因此最终的分类器是一个“集成的集成”。

    “集成的集成”并不代表一定会有更好的表现,作为基学习器的集成学习方法也会影响分类性能。如上述两种方法使用AdaBoost作为基分类器,Boosting类方法本身就对噪声敏感,加上BalanceCascade本身有相同的问题,因此使用非集成分类器可能效果反而更好(如直接使用C4.5)。
    PS,这两种方法使用AdaBoost做基学习器的原因大概率是为了蹭热点(2010年左右)。

    Strength: 
    1. 效果通常较好:没有什么问题是ensemble不能解决的,如果有,再多加一个base learner。根据我的经验集成学习方法(魔改的)仍然是解决不平衡学习问题最有效的方法。
    2. 可使用迭代过程中的反馈进行动态调整:极少数的集成方法具有了动态重采样的思想,如BalanceCascade会在每轮迭代中丢弃那些已经被当前分类器很好地分类的多数类样本(assumption是这些样本已经不含对模型有贡献的信息)。该方法在实际应用时也实现了相比于其他降采样方法更快的收敛速度,使其可以使用相对较少的分类器来得到更优的分类表现。

    Weakness: 
    1. 包含所使用的不平衡学习方法的缺点:由于大多数不平衡集成学习方法仍然在其pipeline中使用了标准的数据级/算法级方法,因此上述两类方法的缺点也同样存在于使用他们的集成方法中。
    2. 过采样+集成进一步增大计算开销:当应用于实际任务时,即便集成能够提升大部分方法的分类表现,这些数据级/算法级方法仍然存在计算效率低,适用性差并且易被噪声影响的缺点。例如,作为过采样方法的SMOTE在单独使用时已经引入了大量的新训练样本,使用SMOTE生成更多的训练数据集并训练更多的分类器只会使整个训练过程变得更慢。
    3. 对噪声不鲁棒:BalanceCascade做出了非常有意义的探索,但其一味保留难以分类样本的策略可能导致在后期的迭代中过度拟合噪声/离群点,并最终恶化集成分类器的表现。换言之,其对噪声不鲁棒。

    训练过程可视化

    为了更直观地阐明上述对不平衡学习方法的分析,我构建了一个合成数据集用于可视化(图2):

    640?wx_fmt=jpeg

    图2:checkerboard数据集的示例。图(c)中的蓝色点代表多数类样本,红色点代表少数类样本

    在该数据集上测试下列五种方法:

    • RandUnder即随机降采样,它随机选取与少数类样本个数相同的多数类样本来组成一个平衡的训练集,并在其上训练一个分类器。

    • Clean指Neighborhood Cleaning Rule方法,它从数据集中移除那些最近邻都来自少数类的多数类样本。

    • SMOTE [14] 指少数类过采样技术(Synthetic Minority Over-sampling TechniquE),它根据最近邻关系向数据集中加入人工合成的少数类样本。

    • Easy [23] 指EasyEnsemble,它通过多次使用RandUnder来训练多个Adaptive Boosting [20] (AdaBoost)分类器并结合他们的输出得到一个集成分类器。需要注意的是AdaBoost本身也是一个集成分类器。

    • Cascade [23] 指BalanceCascade,它是EasyEnsemble的扩展。与Easy不同的是,它在每一轮迭代中都丢弃那些已经被当前基分类器很好地分类的多数类样本,以此减小采样空间并关注在更加难以分类的样本上。

    • 所有方法皆使用AdaBoost(基)分类器。

    640?wx_fmt=jpeg

    图3:5种不平衡学习方法在人工数据集上的可视化,包括3种重采样方法(i.e., RandUnder, Clean, SMOTE)以及两种重采样+集成方法(i.e., Easy, Cascade)

    图2展示了不同方法在checkerboard任务上的训练集(上列,蓝/红色点代表一个来自多数/少数类的样本)以及最终预测(下列,蓝/红色点代表分类器倾向于将一个样本分类为多数/少数类)。由于集成学习方法Easy以及Cascade使用多个不同的训练集训练基学习器,此处我们选择它们用于训练第5和第10个分类器的训练集用于可视化。

    从图中可以观察到RandUnder和Easy执行简单的随机欠采样,因此可能会丢失一些信息。Clean尝试清理被少数类数据点包围的多数类离群点,但是它保留了所有的背景样本,这导致分类器在训练时无法专注于那些含有更多信息的数据点。此外由于类别之间的重叠,SMOTE受到噪声影响过度泛化了少数类的空间分布。Cascade在后期迭代中只保留了一些多数类的离群点,强行拟合这些离群点最终导致了糟糕的泛化性能。

    需要强调为了可视化的效果,我们使用的该合成数据集含有相当多的噪声。在实际应用中BalanceCascade仍然是一种相当出色的不平衡学习方法。

    人生经验:

    总而言之,要根据问题性质的不同选择不同的方法,梳理一下

    • 欠采样:一般是用来平衡数据集、去噪。平衡数据集的有随机欠采样/NearMiss,采样和训练速度都很快。随机欠采样在任何情况下都能用,但在数据集不平衡程度较高时会不可避免地丢弃大部分多数类样本造成信息损失。NearMiss对噪声极端敏感,有噪声基本就废掉。去噪方法有很多,如Tomeklink,AllKNN等,需要数据集上有良好定义的距离度量,在大规模数据集上计算量大。去噪之后对有的分类器有效,有的无效。

    • 过采样:随机过采样任何情况下都不要用,及其容易造成过拟合。SMOTE、ADASYN在小规模数据上可以一试。当数据规模大且不平衡程度高时,过采样方法生成巨量的合成样本,需要很多额外计算资源。同时此类过采样基于少数类样本的结构信息,在少数类的表示质量很差时甚至会反向优化:过采样效果还不如直接训练。

    • 混合采样:理论上加入了去噪类的欠采样算法来清洁过采样之后的数据集。实际使用起来我没感觉到有什么不同,唯一的区别是加了去噪方法之后更慢了。

    • Cost-sensitive:在数据集不平衡程度不高时可用,训练分类器的效率跟使用原始数据训练没有什么区别。缺点是一般需要自己当“领域专家”来设置cost matrix(多了个参数要调),设的不好通常也会得到不理想的效果。此外在不平衡严重的时候,由于没有对数据集的修改,神经网络的训练会crash:连续数个mini-batch都是多数类样本,分分钟陷到local optimal/鞍点。

    • 集成:随机降采样+集成,在不平衡比较高时需要较多的基学习器来达到较好的效果。注意Boosting容易被噪声影响,Bagging方法是真正的万金油,增加基学习器数量效果一般不会下降。高级降采样+集成,也可以尝试,运行会慢并且效果不能保证比随机方法好。高级过采样+集成,同上,数据规模大且不平衡程度高情况下,训练样本数量爆炸。尤其是集成方法还要训练好多个基学习器。BalanceCascade,信息利用效率高,只用很少的基学习器就能达到较好的效果,但对噪声不鲁棒。

    我们为了解决上述高度不平衡、含有较多噪声、且数据规模极大的不平衡分类问题做了一些微小的工作,并且与传统不平衡学习方法做了全面的比较实验,我们的方法计算开销更小,结果更优。过一阵时间可能会挂到arxiv上,届时敬请关注。

    BTW:

    一些经典综述:[3,24,25,26]

    一个包:imbalanced-learn python package(https://github.com/scikit-learn-contrib/imbalanced-learn

    这个包里实现的很多方法效果都不尽人意,(尤其是集成类方法:RUSBoost/EasyEnsemble/BalanceCascade等)发现不好用的话建议自己手写一个/用其他的实现。

    References

    [1] Gamberger D, Lavrac N, Groselj C. Experiments with noise filtering in a medical domain//ICML. 1999: 143-151.

     

    [2] Graepel T, Candela J Q, Borchert T, et al. Web-scale bayesian click-through rate prediction for sponsored search advertising in microsoft’s bing search engine// Omnipress, 2010.

     

    [3] Sun Y, Wong A K, Kamel M S. Classification of imbalanced data: A review. International Journal of Pattern Recognition and Artificial Intelligence, 2009, 23 (04):687-719.

     

    [4] Powers D M. Evaluation: from precision, recall and f-measure to roc, informed-ness, markedness and correlation. 2011.

     

    [5] Sokolova M, Japkowicz N, Szpakowicz S. Beyond accuracy, f-score and roc: a family of discriminant measures for performance evaluation//Australasian joint conference on artificial intelligence. Springer, 2006: 1015-1021.

     

    [6] Boughorbel S, Jarray F, El-Anbari M. Optimal classifier for imbalanced data using matthews correlation coefficient metric. PloS one, 2017, 12(6):e0177678.

     

    [7] Davis J, Goadrich M. The relationship between precision-recall and roc curves// Proceedings of the 23rd international conference on Machine learning. ACM, 2006: 233-240.

     

    [8] García V, Sánchez J, Mollineda R. An empirical study of the behavior of classifiers on imbalanced and overlapped data sets//Iberoamerican Congress on Pattern Recognition. Springer, 2007: 397-406.

     

    [9] Napierała K, Stefanowski J, Wilk S. Learning from imbalanced data in presence of noisy and borderline examples//International Conference on Rough Sets and Current Trends in Computing. Springer, 2010: 158-167.

     

    [10] Prati R C, Batista G E, Monard M C. Learning with class skews and small dis- juncts//Brazilian Symposium on Artificial Intelligence. Springer, 2004: 296-306.

     

    [11] Mani I, Zhang I. knn approach to unbalanced data distributions: a case study involving information extraction//Proceedings of workshop on learning from imbalanced datasets: volume 126. 2003.

     

    [12] Wilson D L. Asymptotic properties of nearest neighbor rules using edited data. IEEE Transactions on Systems, Man, and Cybernetics, 1972(3):408-421.

     

    [13]Tomek I. Two modifications of cnn. IEEE Trans. Systems, Man and Cybernetics, 1976, 6:769-772.

     

    [14] Chawla N V, Bowyer K W, Hall L O, et al. Smote: synthetic minority over-sampling technique. Journal of artificial intelligence research, 2002, 16:321-357.

     

    [15] He H, Bai Y, Garcia E A, et al. Adasyn: Adaptive synthetic sampling approach for imbalanced learning// 2008 IEEE International Joint Conference on Neural Networks (IEEE World Congress on Computational Intelligence). IEEE, 2008: 1322-1328.

     

    [16] Han H, Wang W Y, Mao B H. Borderline-smote: a new over-sampling method in imbalanced data sets learning//International conference on intelligent computing. Springer, 2005: 878-887.

     

    [17] Batista GE, Prati RC, Monard MC. A study of the behavior of several methods for balancing machine learning training data. ACM SIGKDD explorations newsletter, 2004, 6(1):20-29.

     

    [18] Elkan C. The foundations of cost-sensitive learning//International joint conference on artificial intelligence: volume 17. Lawrence Erlbaum Associates Ltd, 2001:973-978.

     

    [19] Liu X Y, Zhou Z H. The influence of class imbalance on cost-sensitive learning: An empirical study//Sixth International Conference on Data Mining (ICDM’06). IEEE, 2006: 970-974.

     

    [20] Freund Y, Schapire R E. A decision-theoretic generalization of on-line learning and an application to boosting. Journal of computer and system sciences, 1997,55(1):119-139.

     

    [21] Chawla N V, Lazarevic A, Hall L O, et al. Smoteboost: Improving prediction of the minority class in boosting//European conference on principles of data mining and knowledge discovery. Springer, 2003: 107-119.

     

    [22] Wang S, Yao X. Diversity analysis on imbalanced data sets by using ensemble models//2009 IEEE Symposium on Computational Intelligence and Data Mining. IEEE, 2009: 324-331.

     

    [23] Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2):539-550.

     

    [24] He H, Garcia E A. Learning from imbalanced data. IEEE Transactions on Knowledge & Data Engineering, 2008(9):1263-1284.

     

    [25] He H, Ma Y. Imbalanced learning: foundations, algorithms, and applications. John Wiley & Sons, 2013.

     

    [26] Haixiang G,Yijing L,Shang J, et al. Learning from class-imbalanced data: Review of methods and applications. Expert Systems with Applications, 2017, 73:220-239

     

    [27] Lemaître G, Nogueira F, Aridas C K. Imbalanced-learn: A python toolbox to tackle the curse of imbalanced datasets in machine learning. Journal of Machine Learning Research, 2017, 18(17):1-5. jmlr.org/papers/v18/16-.

    文章知乎地址 : https://zhuanlan.zhihu.com/p/54199094

     

    欢迎关注磐创博客资源汇总站:
    http://docs.panchuang.net/

    欢迎关注PyTorch官方中文教程站:
    http://pytorch.panchuang.net/

    展开全文
  • (转载)安全漏洞概念及分类

    千次阅读 2014-05-08 12:20:20
    本文是一个安全漏洞相关的科普,介绍安全漏洞的概念认识,漏洞在几个维度上的分类及实 例展示。  安全漏洞及相关的概念  本节介绍什么是安全漏洞及相关的概况。  安全漏洞的定义  我们经常...
  • 平衡数据集的部分分类分类问题,是机器学习中的一个基本问题,收到广泛的关注。主要从三个级别进行考虑 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种...
  • 类别不平衡是指在分类任务中不同类别的训练样本数目差别很大的情况,导致分类结果会偏向于大类,影响分类效果。 类别不平衡对朴素贝叶斯分类器的影响 类别不平衡对SVM的影响 ![在这里插入图片...
  • 为了创建CDP,我们回顾了许多不同云架构所创建的设计,并将这些设计按照所需解决的问题进行分类,然后基于特定的问题创建通用型的设计模式。有一些问题利用传统的数据中心技术也能得到解决,但是我们对这些问题仍然...
  • 在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,...
  • 极端类别不平衡数据下的分类问题

    千次阅读 2019-09-02 09:34:08
    当一个分类任务的数据集中来自不同类别的样本数目相差悬殊时,我们通常称该数据集为“类别不平衡”的。以一个现实任务为例:在点击率预估(click-through rate prediction)任务中,每条展示给用户的广告都产生一条...
  • 平衡学习是机器学习问题的一个重要子域,其主要关注于如何从类别分布不均衡的数据中学习数据的模式。在这篇文章中我们主要关注不平衡分类问题,特别地,我们主要关注类别极端不平衡...
  • 视觉分类任务中处理不平衡问题的loss比较

    万次阅读 多人点赞 2017-10-24 11:08:39
    问题介绍 在计算机视觉(CV)任务里常常会碰到类别不平衡的问题, 例如: 1. 图片分类任务,有的类别图片多,有的类别图片少 ...从实质上来讲, 它们可以归类成分类问题中的类别不平衡问题:对图片/anchor/像素的分类
  •  在数据方面可通过采样达到数据的平衡,有上采样和下采样,上采样就是复制少数样本,达到平衡,缺点:存在重复样本,容易发生过拟合;下采样就是去掉部分多数样本,缺点:导致数据缺失。  数据合成:SMOTE方法,...
  • 分类平衡对软件缺陷预测模型性能的影响研究(笔记) 分类平衡对软件缺陷预测模型性能的影响研究 摘要 分类平衡 : 不同 类别间样本 数量分布不均衡的现象 分类平衡影响分析方法...
  • Weka分类器结果指标含义

    千次阅读 2019-04-10 13:05:58
    Weka分类器结果的指标根据所选择的测试模式,显示不同文字。例如,如果选择十折交叉验证,显示Stratified cross-validation;如果选择使用训练集,显示Classifier model(full training set),等等。由于评估内容较多...
  • 二叉树的概念分类和性质

    千次阅读 2019-04-21 19:42:23
    1、二叉树的概念 二叉树:每个节点最多有两个分支(分支的度小于2)的树结构,可为空树。 根节点:一棵树最上面的节点称为根节点。 左右子树:某个节点的左分支叫做左子树,右分支叫做右子树。 左右孩子:某个节点...
  • 分类 本章中讲到了三种分类方法: 决策树分类 在决策树分类中详细介绍了三种决策树的属性选择度量: 信息增益 分区D为标记类元组的训练集。 D的熵,即所需要的期望信息为: 按某属性A划分D,则该期望值为: 属性A...
  • 将多分类任务拆解为若干个二分类任务求解,先对这些问题经拆分,为拆分出的每个二分类任务训练一个分类器,测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果, 拆分策略:one vs one,一对一,将N个...
  • 第八章 分类:基本概念

    千次阅读 2014-09-17 14:49:48
    基本概念 8.1.1 什么是分类 分类是一种重要的数据分析形式,它提取刻画重要数据类的模型。这种模型称为分类器,预测分类的(离散的、无序的)类标号。这些类别可以用离散值表示,其中值之间的次序没有意义。 8.1.2...
  • 文章目录一、为什么采用ROC作为分类性能指标二、ROC1、roc曲线2、混淆矩阵3、绘制roc曲线三、二分类ROC曲线绘制四、多分类ROC曲线绘制参考文献 一、为什么采用ROC作为分类性能指标   既然已经这么多标准,为什么...
  • 8.分类:基本概念 分类是一种重要的数据分析形式,它提取刻画重要数据类的模型,这种模型称为分类器,预测分类的(离散的、无序的)类标号。 8.1 基本概念 分类和回归(数值预测)是预测问题的两种主要类型。...
  • 迁移学习---迁移学习基础概念分类

    千次阅读 多人点赞 2019-03-18 21:55:19
    迁移学习提出背景 在机器学习、深度学习和数据挖掘的大多数任务中,我们都会假设training和inference时,采用的数据服从相同的分布...比如,处理A领域(target domain)的分类问题时,缺少足够的训练样本。同时...
  • 中间件技术的思想、概念分类

    千次阅读 2016-06-19 13:35:38
    从软件技术看,应用程序的规模不断扩大,特别是InternetWWW的出现,使计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。这一切都对新一代的软件开发提出了新的需求。在这种分布异构环境中,...
  • 物体检测及分类

    万次阅读 2017-02-23 17:02:44
    方法选择: ========DPM========= 使用传统的slider window的方法 计算量非常大 ...最后通过一个卷积网络来同时进行分类,定位和检测三个计算机视觉任务,并在ILSVRC2013中获得了很好的结果。 ========
  • 主要了解了些基金的分类,再也不会迷迷糊糊搞不懂该买什么基了,也知道了一些陌生的概念,例如QDII,最后真心觉得基金靠谱,股票承担不起风险,P2P又暴雷(团贷网),银行理财收益又低,房产呢也不再是能获得高收益...
  • 对于高维数据,提取有效的特征是很有效的方法,能够降低时间提升效率和准确性,但是最近才有研究特征的选择在分类平衡的问题上的作用,具体到yahoo的一个项目中能够有效的优化,文献没有具体说明如何去优化。...
  • CSDN−勿在浮沙筑高台\color{Blue}{CSDN-勿在浮沙... 支持向量机(Support Vector Machine)曾经在分类、回归问题中非常流行。支持向量机也称为最大间隔分类器,通过分离超平面把原始样本集划分成两部分。首先考虑最简单

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,343
精华内容 20,137
关键字:

平衡的概念及分类