【干货】机器学习中样本比例不平衡的处理方法


推荐阅读时间:5min~12min


主要内容:机器学习中样本比例不平衡的处理方法


在机器学习中,常常会遇到样本比例不平衡的问题,如对于一个二分类问题,正负样本的比例是 10:1。

这种现象往往是由于本身数据来源决定的,如信用卡的征信问题中往往就是正样本居多。样本比例不平衡往往会带来不少问题,但是实际获取的数据又往往是不平衡的,因此本文主要讨论面对样本不平衡时的解决方法。

样本不平衡往往会导致模型对样本数较多的分类造成过拟合,即总是将样本分到了样本数较多的分类中;除此之外,一个典型的问题就是 Accuracy Paradox,这个问题指的是模型的对样本预测的准确率很高,但是模型的泛化能力差。

其原因是模型将大多数的样本都归类为样本数较多的那一类,如下所示

准确率为

而假如将所有的样本都归为预测为负样本,准确率会进一步上升,但是这样的模型显然是不好的,实际上,模型已经对这个不平衡的样本过拟合了。

针对样本的不平衡问题,有以下几种常见的解决思路

  1. 搜集更多的数据

  2. 改变评判指标

  3. 对数据进行采样

  4. 合成样本

  5. 改变样本权重

1
搜集更多的数据

搜集更多的数据,从而让正负样本的比例平衡,这种方法往往是最被忽视的方法,然而实际上,当搜集数据的代价不大时,这种方法是最有效的。

但是需要注意,当搜集数据的场景本来产生数据的比例就是不平衡时,这种方法并不能解决数据比例不平衡问题。

2
 改变评判指标

改变评判指标,也就是不用准确率来评判和选择模型,原因就是我们上面提到的 Accuracy Paradox 问题。实际上有一些评判指标就是专门解决样本不平衡时的评判问题的,如准确率,召回率,F1值,ROC(AUC),Kappa 等。

根据这篇文章,ROC 曲线具有不随样本比例而改变的良好性质,因此能够在样本比例不平衡的情况下较好地反映出分类器的优劣。

关于评判指标更详细的内容可参考文章: Classification Accuracy is Not Enough: More Performance Measures You Can Use

3
对数据进行采样

对数据采样可以有针对性地改变数据中样本的比例,采样一般有两种方式:over-sampling和 under-sampling,前者是增加样本数较少的样本,其方式是直接复制原来的样本,而后者是减少样本数较多的样本,其方式是丢弃这些多余的样本。

通常来说,当总样本数目较多的时候考虑 under-sampling,而样本数数目较少的时候考虑 over-sampling

关于数据采样更详细的内容可参考 Oversampling and undersampling in data analysis

4
合成样本

合成样本(Synthetic Samples)是为了增加样本数目较少的那一类的样本,合成指的是通过组合已有的样本的各个 feature 从而产生新的样本。

一种最简单的方法就是从各个 feature 中随机选出一个已有值,然后拼接成一个新的样本,这种方法增加了样本数目较少的类别的样本数,作用与上面提到的 over-sampling方法一样,不同点在于上面的方法是单纯的复制样本,而这里则是拼接得到新的样本。

这类方法中的具有代表性的方法是 SMOTE(Synthetic Minority Over-sampling Technique),这个方法通过在相似样本中进行 feature 的随机选择并拼接出新的样本。

关于 SMOTE 更详细的信息可参考论文 SMOTE: Synthetic Minority Over-sampling Technique

5
改变样本权重


改变样本权重指的是增大样本数较少类别的样本的权重,当这样的样本被误分时,其损失值要乘上相应的权重,从而让分类器更加关注这一类数目较少的样本。


参考:

更多文章请访问:http://wulc.me/

8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset

In classification, how do you handle an unbalanced training set?


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网易10万+课程迅速刷屏又迅速被封:“违规”背后的思考

从16号晚上8点前后上线到17号早上,不到16小时,网易云课堂的“年度运营大课”,已售出超10万份(售价39元),可以说是非常现象级了。而取得如此现象级成果的背后,至少一个核心驱动力源自于一个“一级…

一起学习设计模式--03.工厂方法模式

简单工厂模式虽然简单,但是存在一个很严重的问题:由于静态工厂方法是根据传入的参数不同来创建不同的产品的,所以当系统中需要引入新产品时,就需要修改工厂类的源代码,这将违背开闭原则。为了实现增加新产品而不修改原…

求对一组数据进行排名的算法

为什么80%的码农都做不了架构师?>>> 我现在有一组数据,比如:25,19,29,3 怎么用java获得这组数据的排名,获得排名的结果应该是3,2,4,1 如果有相等…

一份数学小白也能读懂的「马尔可夫链蒙特卡洛方法」入门指南

在众多经典的贝叶斯方法中,马尔可夫链蒙特卡洛(MCMC)由于包含大量数学知识,且计算量很大,而显得格外特别。本文反其道而行之,试图通过通俗易懂且不包含数学语言的方法,帮助读者对 MCMC 有一个直…

使用 xunit 编写测试代码

使用 xunit 编写测试代码Introxunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使用 xunit 来作为测试框架。Get Started在 xunit 中不需要标记测试…

白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟

如果在这个人工智能的时代,作为一个有理想抱负的程序员,或者学生、爱好者,不懂深度学习这个超热的话题,似乎已经跟时代脱节了。但是,深度学习对数学的要求,包括微积分、线性代数和概率论与数理统计等&#…

IdentityServer4密码模式

Oatuth2协议的密码模式介绍用户会将用户名,密码给予客户端,但是客户端不保存此信息,客户端带着用户的密码请求认证服务器,认证服务器密码验证通过后后将token返回给客户端。 这里借用下阮一峰老师画的图(博客地址》htt…

IKVM 编程武林之.NET派的北冥神功

为什么80%的码农都做不了架构师?>>> 在编程武林中,Java派成立较久底子雄厚,虽然掌门人Sun已经老态龙钟,镇山之技的Java语言已经被后进的新秀.NET派的C#压得喘不过气来,甚至有时候Sun老大还得跑到.NET派潜伏…

php 自定义菜单 openid,微信公众平台开发(99) 自定义菜单获取OpenID

关键字 微信公众平台 自定义菜单 OpenID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单中获得用户的OpenID。本篇开发教程的实质是微信自定义菜…

mysql优化的重要参数 key_buffer_size table_cache

MySQL服务器端的参数有很多,但是对于大多数初学者来说,众多的参数往往使得我们不知所措,但是哪些参数是需要我们调整的,哪些对服务器的性能影响最大呢?对于使用Myisam存储引擎来说,主要有key_buffer_size和…

代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton

据说「软件工程师」这个名词就是她发明的玛格丽特站在阿波罗计算机指导手册 (AGC) 的源代码程序列表旁边,这些材料摞起来比她的人还要高。图片来源:Margaret Hamilton缔造传奇的人似乎有个共性:本来没想干一票大的,甚至她的打算都…

每扇区2048字节的U盘乱码的数据恢复

每扇区2048字节的U盘乱码的数据恢复一个U盘,FAT32分区,显示的是乱码,远程看对方的U盘参数,发现一个比较怪的现象:每扇区字节数是2048字节(U盘量产时可能是以光盘形式形成的),对方传的…

为什么有些大公司的效率弱爆了?

阅读本文大概需要5分钟。上周写了篇文章:为什么有些大公司的技术弱爆了?不少朋友读完后表示有同感,还有一些朋友在读者群探讨大公司效率问题。有几个朋友谈到自己的公司效率低下,做一件事需要层层审批,并且遇到各种阻力…

2018年最有前景的十大行业

我们想和大家分享的是围绕十个行业、数十个细分领域,在2018年发展趋势展望:01 消费新零售——平台级近半年,新零售已被多次提及。但在年终盘点我们再次提到这个“热词”,是因为该领域未来还将出现超级平台级的公司。新零售未来更多…

昨日搬至办公室的书籍

由于家里地方小,总有一部分书籍需要跟着我辗转至各公司。其中一些公司只能让我放抽屉(地方小)甚至地板上,而有一些公司就能让我把书都摞桌子上。昨天下午我特地来了一次办公室,只为搬运书籍。灭霍霍,可真是…

如何在 ASP.Net Core 中对接 WCF

在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三方服务采用的是基于SOAP协议的场景,在这篇文章中,我们将会讨论如何…

什么是区块链? 区块链的入门教程~

区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。下面,我就来尝试,…

linux提升权限命令提示符,win10如何直接使用命令提示符提高管理员权限?

原标题:win10如何直接使用命令提示符提高管理员权限?在使用普通的命令提示符时,如果遇到需要管理员权限的操作,往往需要重新打开一个具有管理员权限的命令提示符页面进行操作。而在Linux操作系统中,可以通过输入su来获取系统最高…

探索 .NET Core 依赖注入的 IServiceProvider

在上一篇文章中,我们学习了Microsoft.Extensions.DependencyInjection中的IServiceCollection,包括服务注册转换为ServiceDescriptors,然后添加到集合中。探索 .NET Core 依赖注入的 IServiceCollection[1]在本文中,我们会学习 IS…

如何快速高效地学习互联网新技术

我们生活在一个振奋人心的时代,区块链、人工智能、大数据,现在各种新技术层出不穷,那么如何快速高效地学习互联网新技术呢?我认为首先思想要主动求变,敢于跳出自己的舒适区,对任何技术都抱有开放的心态。贪…