不均衡样本集的重采样

原文:http://www.iterate.site/2019/04/13/07-%E4%B8%8D%E5%9D%87%E8%A1%A1%E6%A0%B7%E6%9C%AC%E9%9B%86%E7%9A%84%E9%87%8D%E9%87%87%E6%A0%B7/

在训练二分类模型时,例如医疗诊断、网络入侵检测、信用卡反诈骗等,经常会遇到正负样本不均衡的问题。是的,正样本很少,负样本一大堆。

对于很多分类算法,如果直接采用不均衡的样本集来进行训练学习,会存在一些问题。例如,如果正负样本比例达到1∶99,则分类器简单地将所有样本都判为负样本就能达到99%的正确率,显然这并不是我们想要的,我们想让分类器在正样本和负样本上都有足够的准确率和召回率。

采样,数据扩充

对于二分类问题,当训练集中正负样本非常不均衡时,如何处理数据以更好地训练分类模型?

为什么很多分类模型在训练数据不均衡时会出现问题?

本质原因是模型在训练时优化的目标函数和人们在测试时使用的评价标准不一致。是的。:

  • 这种“不一致”可能是由于训练数据的样本分布与测试时期望的样本分布不一致,例如,在训练时优化的是整个训练集(正负样本比例可能是1∶99)的正确率,而测试时可能想要模型在正样本和负样本上的平均正确率尽可能大(实际上是期望正负样本比例为1∶1);
  • 也可能是由于训练阶段不同类别的权重(重要性)与测试阶段不一致,例如训练时认为所有样本的贡献是相等的,而测试时假阳性样本(False Positive)和伪阴性样本(False Negative)有着不同的代价。是的,不同的代价

根据上述分析,一般可以从两个角度来处理样本不均衡问题[17]。

基于数据的方法

对数据进行重采样,使原本不均衡的样本变得均衡。首先,记样本数大的类别为Cmaj,样本数小的类别Cmin,它们对应的样本集分别为Smaj和Smin。根据题设,有 ∣Smaj∣>>|Smin|。

最简单的处理不均衡样本集的方法是随机采样。

采样一般分为过采样(Over-sampling)和欠采样(Under-sampling)。

  • 随机过采样是从少数类样本集 SminSmin 中随机重复抽取样本(有放回)以得到更多样本;
  • 随机欠采样则相反,从多数类样本集 S maj S maj  中随机选取较少的样本(有放回或无放回)。

感觉过采样和欠采样都有些问题吧。嗯,下面说了。

直接的随机采样虽然可以使样本集变得均衡,但会带来一些问题,比如:

  • 过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练的复杂度,同时也容易造成过拟合;
  • 欠采样会丢弃一些样本,可能会损失部分有用信息,造成模型只学到了整体模式的一部分。

是呀。

为了解决上述问题,通常在过采样时并不是简单地复制样本,而是采用一些方法生成新的样本。例如,SMOTE 算法对少数类样本集 Smin中每个样本 xx,从它在 Smin中的 K 近邻中随机选一个样本 y,然后在 x,y 连线上随机选取一点作为新合成的样本(根据需要的过采样倍率重复上述过程若干次),如图8.14所示。嗯,感觉有些厉害,但是这种合成要怎么合成?两个样本怎么合成成一个样本?

mark

这种合成新样本的过采样方法可以降低过拟合的风险。

SMOTE 算法为每个少数类样本合成相同数量的新样本,这可能会增大类间重叠度,并且会生成一些不能提供有益信息的样本。是呀。

为此出现 Borderline-SMOTE、ADASYN 等改进算法。

  • Borderline-SMOTE 只给那些处在分类边界上的少数类样本合成新样本,
  • 而 ADASYN 则给不同的少数类样本合成不同个数的新样本。

此外,还可以采用一些数据清理方法(如基于Tomek Links)来进一步降低合成样本带来的类间重叠,以得到更加良定义(well-defined)的类簇,从而更好地训练分类器。哇塞,这么厉害!简直了,各种手段,厉害!都要总结进来。

同样地,对于欠采样,可以采用 Informed Undersampling 来解决由于随机欠采样带来的数据丢失问题。常见的 Informed Undersampling 算法有:

  • Easy Ensemble 算法。每次从多数类 Smaj 中上随机抽取一个子集 E(|E|≈|Smin|),然后用 E+Smin训练一个分类器;重复上述过程若干次,得到多个分类器,最终的分类结果是这多个分类器结果的融合。嗯,感觉还是有道理的。
  • Balance Cascade 算法。级联结构,在每一级中从多数类 Smaj 中随机抽取子集 EE ,用 E+Smin 训练该级的分类器;然后将Smaj中能够被当前分类器正确判别的样本剔除掉,继续下一级的操作,重复若干次得到级联结构;最终的输出结果也是各级分类器结果的融合。是的,这个感觉类似决策树。
  • 其他诸如 NearMiss(利用K近邻信息挑选具有代表性的样本)、One-sided Selection(采用数据清理技术)等算法。这些也要总结下。

在实际应用中,具体的采样操作可能并不总是如上述几个算法一样,但基本思路很多时候还是一致的。例如:

  • 基于聚类的采样方法,利用数据的类簇信息来指导过采样/欠采样操作;
  • 经常用到的数据扩充方法也是一种过采样,对少数类样本进行一些噪声扰动或变换(如图像数据集中对图片进行裁剪、翻转、旋转、加光照等)以构造出新的样本;
  • 而Hard Negative Mining则是一种欠采样,把比较难的样本抽出来用于迭代分类器。

基于算法的方法

在样本不均衡时,也可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)来矫正这种不平衡性;当样本数目极其不均衡时,也可以将问题转化为单类 学习(one-class learning)、异常检测(anomaly detection)。本节主要关注采样,不再赘述。哇塞!思路清奇呀!竟然可以转化成单类检测和异常检测。嗯,还是要再补充下的。

总结与扩展

在实际面试时,这道题还有很多可扩展的知识点。例如:

  • 模型在不均衡样本集上的评价标准
  • 不同样本量(绝对数值)下如何选择合适的处理方法(考虑正负样本比例为1∶100和1000∶100000的区别)
  • 代价敏感学习和采样方法的区别、联系以及效果对比等。嗯,这个也想知道。

这些都要总结,弄清楚。

原文及相关

  • 《百面机器学习》

原文地址:https://www.cnblogs.com/ottll/p/11057852.html

时间: 2024-08-30 14:27:19

不均衡样本集的重采样的相关文章

不均衡样本集问题

2019-08-27 11:01:52 问题描述:对于二分类问题,如果在训练的时候正负样本集合非常的不均衡,比如出现了1 :1000甚至更大的比例悬殊,那么如何处理数据以更好的训练模型. 问题求解: 为什么很多的分类模型在训练数据的时候会出现数据不均衡的问题呢?本质原因是模型在训练时优化的目标函数和人们在测试的时候的评价标准不一致.这种不对齐可能是由于训练数据的样本分布与测试时的样本分布一致,比如在训练的时候正负样本严重不均衡,但是在测试的时候,正负的比例几乎是1 :1.也可能是由于训练阶段不同

第八章 采样

所谓的采样就是从特定的概率分布中抽取相应样本点的过程. 这一章涉及的数学知识偏多,比较枯燥,个人只对最后一节 <07 不均衡样本集的重采样> 重点看了下 1 采样的作用 采样本质上是对随机现象的模拟,根据给定的概率分布,来模拟产生一个对应的随机事件. 2 均匀分布随机数 Q1:如何编程实现均匀分布随机数生成器? A1:一般可采用线性同余法来生成离散均匀分布伪随机数,计算公式为 Xt+1 ≡ a · Xt + c (mod m) 3 常见的采样方法 从某种意义上说,采样时概率密度函数的逆向应用.

机器学习中的类别不均衡问题

基础概念 类别不均衡是指在分类学习算法中,不同类别样本的比例相差悬殊,它会对算法的学习过程造成重大的干扰.比如在一个二分类的问题上,有1000个样本,其中5个正样本,995个负样本,在这种情况下,算法只需将所有的样本预测为负样本,那么它的精度也可以达到99.5%,虽然结果的精度很高,但它依然没有价值,因为这样的学习算法不能预测出正样本.这里我们可以知道不均衡问题会导致样本较少那一类的高错分率,即较少一类的样本会有较大的比例会被预测成样本数量较多的那一类. 解决方法 1.欠采样,减少数量较多那一类

模型构建&lt;2&gt;:不平衡样本集的处理

分类预测建模都有一个基本的假设,即样本集中不同类别的样本个数基本相同,但是在实际任务中,经常会出现各类样本个数差别较大的情况,这样的样本集就是不平衡样本集,它对学习建模的性能会带来很大的影响,因此必须掌握常用的处理方法,本文针对这一点进行总结梳理. 1.什么是不平衡样本集? 不平衡样本集(class-imbalance dataset)是指分类预测任务中不同类别的训练样本的数量差别较大的数据集. 举例:比如一个样本集中正例10例,反例990例,正例占比仅为1%,是一个严重的不平衡样本集. 理想情

【转】解决样本类别分布不均衡的问题

3.4 解决样本类别分布不均衡的问题 说明:本文是<Python数据分析与数据化运营>中的“3.4 解决样本类别分布不均衡的问题”. -----------------------------下面是正文内容-------------------------- 所谓的不平衡指的是不同类别的样本量异非常大.样本类别分布不平衡主要出现在分类相关的建模问题上.样本类别分布不均衡从数据规模上可以分为大数据分布不均衡和小数据分布不均衡两种. 大数据分布不均衡.这种情况下整体数据规模大,只是其中的少样本类的

机器学习之样本不均衡

以下内容是个人通过查阅网上相关资料总结出的内容 具体说明数据不均衡会带来的问题: 1)在一个二分类问题中,训练集中class 1的样本数比class 2的样本数是60:1.使用逻辑回归进行分类,最后训练出的模型可能会忽略了class 2,即模型可能会将所有的训练样本都分类为class 1. 2)在分类任务的数据集中,有三个类别,分别为A,B,C.在训练集中,A类的样本占70%,B类的样本占25%,C类的样本占5%.最后我的分类器对类A的样本过拟合了,而对其它两个类别的样本欠拟合. 那么该如何解决

Nginx做负载均衡时session共享问题详解

用nginx做负载均衡时,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 再者Nginx连接Memcached集群时,Nignx的请求从memcached服务器中根据key获得了value则直接返回value,如果没有获得到value则去MySQL中查询再返回. location / { set $memcached_key "$request_uri"; #设置请求memcached服务器的key memca

nginxtomca负载均衡

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎.能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型. 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务.

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director