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

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] 如何处理分类中的训练数据集不均衡问题

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

  1. 员工离职困扰?来看AI如何解决,基于人力资源分析的 ML 模型构建全方案 ⛵

    作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...

  2. CSS3之简易的3D模型构建[原创开源]

    CSS3之简易的3D模型构建[开源分享] 先上一张图(成果图):这个是使用 3D建模空间[源码之一] 制作出来的模型之一 当然这是一部分模型特写, 之前还制作过枪的3D模型等等. 感兴趣的朋友可以自己 ...

  3. ArcGIS Pro 简明教程(4)工具和模型构建器

    ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适 ...

  4. wiki中文语料的word2vec模型构建

    一.利用wiki中文语料进行word2vec模型构建 1)数据获取 到wiki官网下载中文语料,下载完成后会得到命名为zhwiki-latest-pages-articles.xml.bz2的文件,里 ...

  5. Microsoft宣布为Power BI提供AI模型构建器,关键驱动程序分析和Azure机器学习集成

    微软的Power BI现在是一种正在大量结合人工智能(AI)的商业分析服务,它使用户无需编码经验或深厚的技术专长就能够创建报告,仪表板等.近日西雅图公司宣布推出几款新的AI功能,包括图像识别和文本分析 ...

  6. MXNET:深度学习计算-模型构建

    进入更深的层次:模型构造.参数访问.自定义层和使用 GPU. 模型构建 在多层感知机的实现中,我们首先构造 Sequential 实例,然后依次添加两个全连接层.其中第一层的输出大小为 256,即隐藏 ...

  7. ArcGIS模型构建器案例教程-批量复制工作空间所有要素类

    ArcGIS模型构建器案例教程-批量复制工作空间所有要素类 目的:批量复制工作空间所有要素类 工具名称:WorkspaceCopyFeatureClasses 使用方法:输入工作空间,指定输出工作空间 ...

  8. ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考

    ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考 目的:批量修改工作空间所有要素类的空间参考(坐标系) 工具名称:WorkspaceChangeSpatialReference 使 ...

  9. ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理

    ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理 计划时间:第二天下午 背景:数据量大,工程大 目的:自动化,批处理,定制业务流程,不写程序 教程:Pdf/343 数据:chap8/ex5 ...

随机推荐

  1. 【译】第十篇 SQL Server代理使用代理帐户

    本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole ...

  2. go 切片练习

    下列程序输出什么? package main import "fmt" func main() {     var sa = make([]string, 5, 10)     f ...

  3. 一个脚本和一个容易疏忽的问题strcmp、strncmp、memcmp的用法【原创】

    一个容易疏忽的问题: strcmp.strncmp.memcmp, 对于memcmp进行字符串比较时可能会出现内存重叠的情况 status = strncmp(xdev->product, &q ...

  4. Python类相关的装饰器

    一.装饰器装饰类方法 from functools import wraps def wrapper(func): @wraps(func) def inner(self,*args,**kwargs ...

  5. 以太坊go-ethereum常见问题汇总

    (1)什么是 Ethereum? 以太坊是一个分散的智能合同平台,由Ether的加密货币提供支持. (2) 听说过以太坊,但什么是Geth,Mist,Ethminer,Mix? Geth: 以太坊节点 ...

  6. luogu P1126 机器人搬重物 题解

    luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...

  7. shell常用

    -e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真-L filen ...

  8. linux 101 hacks 4stat diff ac

    stat 命令 stat 命令那个可以用来查看文件或者文件系统的状态和属性.显示一个文件或目录的属性 $ stat /etc/my.cnf File: `/etc/my.cnf' Size: Bloc ...

  9. python开发之路Day17-算法设计(冒泡排序、选择排序、插入排序、二叉树)

    s12-20160514-day17 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  10. nodejs 项目,请求返回Invalid Host header问题

    今天在linux上安装node,使用node做一个web服务器,在linux上安装各种依赖以后开始运行但是,出现了:Invalid Host header 的样式,在浏览器调试中发现是node返回的错 ...