模型构建<2>:不平衡样本集的处理

分类预测建模都有一个基本的假设,即样本集中不同类别的样本个数基本相同,但是在实际任务中,经常会出现各类样本个数差别较大的情况,这样的样本集就是不平衡样本集,它对学习建模的性能会带来很大的影响,因此必须掌握常用的处理方法,本文针对这一点进行总结梳理。

1.什么是不平衡样本集?

不平衡样本集(class-imbalance dataset)是指分类预测任务中不同类别的训练样本的数量差别较大的数据集。

举例:比如一个样本集中正例10例,反例990例,正例占比仅为1%,是一个严重的不平衡样本集。

理想情况下,总希望训练集中各类样本分布均匀,但在实际情况中,样本集不平衡就是一个实实在在的现实而且合理的问题。比如流失预警模型中,真正流失的用户相对未流失的用户比例就是极小的;信用卡欺诈模型中,发生信用欺诈的用户也是极少的。

2.不平衡样本集带来的影响?

样本集不平衡会导致模型很难从样本量较少的一方中提取到有用的规律,使得模型的学习结果偏向于样本量较多的一方。比如上面这个例子,正例10例,反例990例,即使一个模型将全部样例预测为反例,正确率也可以达到99%,但是对于我们想找到的正例这一目标来说,这个模型是无效的。

一般地,对于一个二分类问题,正反例比例在1:5以内是可以不处理的,超过1:5就需要考虑处理这个问题。

3.不平衡样本集的处理方法

以二分类任务为例,介绍不平衡样本集的处理方法。主要分为三种处理方法:

3.1 对正例过抽样

对训练集中的正例进行过抽样(oversampling),即增加一些正例,使得正反例数目相接近。最简单的做法是直接复制正例的样本使样本数翻倍,但是这种方法带来的问题是,样本数的增加并没有带来新的特征,容易使模型产生较严重的过拟合。

一种改进的做法是SMOTE(Synthetic Minority Over-sampling Technique)算法,它是通过在正例中加入随机噪声、干扰数据或者一定规则来产生新的合成样本。

3.2 对反例欠抽样

对训练集中的反例进行欠抽样(undersampling),即减少一些反例,使得正反例数目相接近。最直接的做法是直接随机提出到一些反例来减少反例的规模,但是这种方法带来的问题是,会丢失反例的一些重要信息。

一种改进的做法是EasyEnsemble算法,它是利用集成学习的思路,将反例划分成若干个子集,将各个子集分别与正例组合成均衡的训练集,进行学习产生多个模型,每个模型相当于都进行了欠抽样,但整体上又没有丢失反例的重要信息。

3.3 阈值移动

一般地,分类预测模型都会产生一个实值或者概率值,同时需要设定一个阈值(threshold),将模型的预测值与这个阈值进行比较,来判定预测结果是正例还是反例。默认情况下,这个阈值会设为0.50。为什么是0.50?是因为上文中提到的一个基本假设,假定训练集中的正反样例个数基本相同。但是实际情况中,正反例并不都是0.50,所以此时如果仍然将阈值设定为0.50就显得不太合适,应该认为,只要模型预测的概率大于随机抽取的概率(即训练集中正例的占比)都应该被判定为正例。

按照这一思想,就产生了一种针对不平衡样本集的处理方法,即阈值移动(threshold-moving)

它是指,直接使用原始训练集进行学习,但是在用这个学习到的模型进行预测时,要将原始的正例比例考虑到正例识别的阈值设定中。

4.参考与感谢

[1] 机器学习

[2] Python数据分析与数据化运营

[3] 在分类中如何处理训练集中不平衡问题

[4] 如何处理分类中的训练数据集不均衡问题

原文地址:https://www.cnblogs.com/hbsygfz/p/9363257.html

时间: 2024-10-12 09:43:06

模型构建<2>:不平衡样本集的处理的相关文章

keepalived基础及使用DR模型构建一个real_server

keepalived HA的解决方案的两大流派分为heartbeat.corosync和keepalived keepalived在诞生时被赋予的使命仅仅是为lvs的director的HA.生成ipvs规则和监控后端主机的健康状况 keepalived是可以模拟并以进程的方式实现vrrp协议,并以此协议进行工作的HA解决方案 vrrp:虚拟冗余路由协议 vrrp的工作方式:将两个或两个以上的物理路由设备定义成一个虚拟的路由器,这种方式称作为一个路由组,这组路由设备共同构建成为一个虚拟的路由,在此

多种贝叶斯模型构建文本分类

多种贝叶斯模型构建及文本分类的实现 作者:白宁超 2015年9月29日11:10:02 摘要:当前数据挖掘技术使用最为广泛的莫过于文本挖掘领域,包括领域本体构建.短文本实体抽取以及代码的语义级构件方法研究.常用的数据挖掘功能包括分类.聚类.预测和关联四大模型.本文针对四大模型之一的分类进行讨论.分类算法包括回归.决策树.支持向量机.贝叶斯等,显然,不少涉及机器学习的知识(随后会写些机器学习专题).本文重点介绍贝叶斯分类,涉及朴素贝叶斯模型.二项独立模型.多项模型.混合模型等知识.在本人研究贝叶斯

Kinect for Windows SDK v2.0 开发笔记 (十三) 高清面部帧(4) 面部模型构建器

 (转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview1409 同前面,因为SDK未完成,不附上函数/方法/接口的超链接. 这次让我们让面部捕捉更加稳定/精确吧! 自从一直8月有了高清面部帧的例子后,觉得IFaceModel::GetFaceShapeDeformations它不干正事,一直返回0.0f的数据. 与其他开发者简单交流后,发现了问题的根本所在,需要面部模型构建器(IFaceModelBuilder). 好了,那么

ArcGIS教程:链接模型构建器中的制图综合工具

制图综合工具使用多值输入,即一个或多个要素类的列表.许多地理处理工具接受多值(例如联合工具),但是制图综合工具却有点不同,它们还输出多值.您需要了解一些"模型构建器"技术以生成想要的模型.下面将对这些技术进行讨论. 链接具有多个输入和输出的工具 细化道路网.解决道路冲突和解决建筑物冲突工具可输出多值.这意味着只有接受多值输入的工具才能直接使用这些工具的输出.例如,如果三个图层用作细化道路网工具的输入,并且希望细化这三个图层后,使用这三个图层作为解决道路冲突工具的输入,则可以直接将细化道

基于keepalived的LVS-DR模型构建

实验拓扑:基础环境的准备:两台keepalived的高可用服务器,两台real server用于配置httpd服务在两台real server上安装httpd服务并创建测试页面: 关闭防火墙跟selinux之后开始配置 yum install -y httpd systemctl start httpd systemctl enable httpd vim /var/www/html/index.html //创建测试页面 This httpd-1 Page 另一台real server做同样配

【从零开始学习YOLOv3】6. 模型构建中的YOLOLayer

前言:上次讲了YOLOv3中的模型构建,从头到尾理了一遍从cfg读取到模型整个构建的过程.其中模型构建中最重要的YOLOLayer还没有梳理,本文将从代码的角度理解YOLOLayer的构建与实现. 1. Grid创建 YOLOv3是一个单阶段的目标检测器,将目标划分为不同的grid,每个grid分配3个anchor作为先验框来进行匹配.首先读一下代码中关于grid创建的部分. 首先了解一下pytorch中的API:torch.mershgrid 举一个简单的例子就比较清楚了: Python 3.

使用深度RNN模型构建语义搜索引擎

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 本文讨论如何用深度学习系统来构造语义搜索引擎的问题.这里所谓的语义搜索,是指的能做用户查询和搜索网页之间的语义级别匹配,比如说,用户输入"Iphone",虽然某篇文章讲到了"苹果公司正在试图做新型的手机",但是没有明确说iphone的字样,那么即使如此也能够将这篇文章找出来.传统的搜索引擎对于这种情况是无能为力的,因为它们基本上还是基于字面匹配作为排序的基础的,没有任何

RFM模型——构建数据库营销的商业战役!(转)

RFM模型:R(Recency)表示客户最近一次购买的时间有多远,F(Frequency)表示客户在最近一段时间内购买的次数,M (Monetary)表示客户在最近一段时间内购买的金额.一般原始数据为3个字段:客户ID.购买时间.购买金额,用数据挖掘软件处理,加权(考虑权重)得到RFM得分,对得分排序,输出营销名单topN! 上图来自于@数据挖掘与数据分析 下面我们采用IBM Modeler 14.1版本操作RFM模型:(采用数据挖掘技术来分析RFM是一件简单的工作,因为软件非常智能化,或者说基

模型构建

承前:大型系统的支撑,应用系统开发思想的变迁,DDD实践切入点(一),DDD实践切入点(二) 上回已经分完了上下文,其中很明显流程部分使用工作流引擎就差不多了,所以需要重点关注的工作就是申请单管理的上下文.到现在差不多可以开始结合具体情况和目标来设计申请单的模型了. 这个模型需要满足的公司内各种业务流程的审批,大概如下图(不完全),每个节点代表一个审批流程,每种审批流程申请单都不同. 经过分析抽象,建立了一个抽象的申请单模型,将申请单中最基本的概念识别出来,分离到不同的类.抽象类或接口中.使模型