模型构建<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] 如何处理分类中的训练数据集不均衡问题
模型构建<2>:不平衡样本集的处理的更多相关文章
- 员工离职困扰?来看AI如何解决,基于人力资源分析的 ML 模型构建全方案 ⛵
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...
- CSS3之简易的3D模型构建[原创开源]
CSS3之简易的3D模型构建[开源分享] 先上一张图(成果图):这个是使用 3D建模空间[源码之一] 制作出来的模型之一 当然这是一部分模型特写, 之前还制作过枪的3D模型等等. 感兴趣的朋友可以自己 ...
- ArcGIS Pro 简明教程(4)工具和模型构建器
ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适 ...
- wiki中文语料的word2vec模型构建
一.利用wiki中文语料进行word2vec模型构建 1)数据获取 到wiki官网下载中文语料,下载完成后会得到命名为zhwiki-latest-pages-articles.xml.bz2的文件,里 ...
- Microsoft宣布为Power BI提供AI模型构建器,关键驱动程序分析和Azure机器学习集成
微软的Power BI现在是一种正在大量结合人工智能(AI)的商业分析服务,它使用户无需编码经验或深厚的技术专长就能够创建报告,仪表板等.近日西雅图公司宣布推出几款新的AI功能,包括图像识别和文本分析 ...
- MXNET:深度学习计算-模型构建
进入更深的层次:模型构造.参数访问.自定义层和使用 GPU. 模型构建 在多层感知机的实现中,我们首先构造 Sequential 实例,然后依次添加两个全连接层.其中第一层的输出大小为 256,即隐藏 ...
- ArcGIS模型构建器案例教程-批量复制工作空间所有要素类
ArcGIS模型构建器案例教程-批量复制工作空间所有要素类 目的:批量复制工作空间所有要素类 工具名称:WorkspaceCopyFeatureClasses 使用方法:输入工作空间,指定输出工作空间 ...
- ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考
ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考 目的:批量修改工作空间所有要素类的空间参考(坐标系) 工具名称:WorkspaceChangeSpatialReference 使 ...
- ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理
ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理 计划时间:第二天下午 背景:数据量大,工程大 目的:自动化,批处理,定制业务流程,不写程序 教程:Pdf/343 数据:chap8/ex5 ...
随机推荐
- 2016.6.18——Implement strStr()
Implement strStr() 本题收获: 1.考虑多种边界条件. 2.haystack.size() size_type 是无符号的,即为正数 在32位系统上定义为 unsigned int ...
- Linux触摸屏驱动测试程序范例【转】
转自:http://blog.sina.com.cn/s/blog_4b4b54da0102viyl.html 转载2015-05-09 16:28:27 标签:androiditlinux 触摸屏驱 ...
- xshell5 优化方案
有道云笔记链接-> grep: 过滤 过滤的速度是最快的(相对于另外两个) -v -n -o 显示grep匹配到了什么 grep . -o -i --ignore-case -E == ...
- JAVA汉字转拼音(取首字母大写)
import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseT ...
- java基础54 网络通讯的三要素及网络/网页编程的概述
1.概述 网络编程注意解决的是计算机(手机.平板.....)之间的数据传输问题. 网络编程:不需要基于html基础上,就可以进行数据间的传输.比如:FeiQ.QQ.微信..... ...
- 简单的UDP接受程序
//功能:客服端发送UDP包,服务器接受到并打印出来//2015.9.13成功 #include <stdio.h>#include <sys/socket.h>#includ ...
- Git push将本地版本库的分支推送到远程服务器上对应的分支
在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构. g ...
- CSS — 贝塞尔曲线(cubic-bezier)
cubic-bezier 又称三次贝塞尔,主要是为 animation 生成速度曲线的函数,规定是 cubic-bezier(<x1>, <y1>, <x2>, & ...
- SQLServer系统变量使用
1.@@IDENTITY返回最后插入的标识值.这个变量很有用,当你插入一行数据时,想同时获得该行的的ID(标示列),就可以用@@IDENTITY示例:下面的示例向带有标识列的表中插入一行,并用 @@I ...
- 快速php日志,写内容到文件,把日志写到log文件
php 写内容到文件,把日志写到log文件 //记录日志:要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个.log.txt位置在项目的根目录下. $file = 'log.txt' ...