机器学习——下采样(under-sampling)「建议收藏」

下采样(under-sampling)什么是下采样?当原始数据的分类极不均衡时,如下图我们要想用这样的数据去建模显然是存在问题的。尤其是在我们更关心少数类的问题的时候数据分类不均衡会更加的突出,例如,信用卡诈骗、病例分析等。在这样的数据分布的情况下,运用机器学习算法的预测模型可能会无法做出准确的预测,最后的模型显然是趋向于预测多数集的,少数集可能会被当做噪点或被忽视,相比多数集,少数集被…

大家好,又见面了,我是你们的朋友全栈君。

下采样(under-sampling)

什么是下采样?

当原始数据的分类极不均衡时,如下图
在这里插入图片描述
在这里插入图片描述
我们要想用这样的数据去建模显然是存在问题的。尤其是在我们更关心少数类的问题的时候数据分类不均衡会更加的突出,例如,信用卡诈骗、病例分析等。在这样的数据分布的情况下,运用机器学习算法的预测模型可能会无法做出准确的预测,最后的模型显然是趋向于预测多数集的,少数集可能会被当做噪点或被忽视,相比多数集,少数集被错分的可能性很大。从本质上讲,机器学习算法就是从大量的数据集中通过计算得到某些经验,进而判定某些数据的正常与否。但是,不均衡数据集,显然少数类的数量太少,模型会更倾向于多数集。

常用的下采样方法

解决数据分布不均衡的下采样的目的就从多数集中选出一部分数据与少数集重新组合成一个新的数据集。那么如何在多数集中选出这样的数据呢?

1. 随机下采样

随机欠采样的思想同样比较简单,就是从多数类样本中随机选取一些剔除掉。这种方法的缺点是被剔除的样本可能包含着一些重要信息,致使学习出来的模型效果不好。

2. EasyEnsemble 和 BalanceCascade

EasyEnsemble和BalanceCascade采用集成学习机制来处理传统随机欠采样中的信息丢失问题。

  • EasyEnsemble将多数类样本随机划分成n个子集,每个子集的数量等于少数类样本的数量,这相当于欠采样。接着将每个子集与少数类样本结合起来分别训练一个模型,最后将n个模型集成,这样虽然每个子集的样本少于总体样本,但集成后总信息量并不减少。
  • 如果说EasyEnsemble是基于无监督的方式从多数类样本中生成子集进行欠采样,那么BalanceCascade则是采用了有监督结合Boosting的方式(Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数)。在第n轮训练中,将从多数类样本中抽样得来的子集与少数类样本结合起来训练一个基学习器H,训练完后多数类中能被H正确分类的样本会被剔除。在接下来的第n+1轮中,从被剔除后的多数类样本中产生子集用于与少数类样本结合起来训练,最后将不同的基学习器集成起来。BalanceCascade的有监督表现在每一轮的基学习器起到了在多数类中选择样本的作用,而其Boosting特点则体现在每一轮丢弃被正确分类的样本,进而后续基学习器会更注重那些之前分类错误的样本。

3. NearMiss

NearMiss本质上是一种原型选择(prototype selection)方法,即从多数类样本中选取最具代表性的样本用于训练,主要是为了缓解随机欠采样中的信息丢失问题。NearMiss采用一些启发式的规则来选择样本,根据规则的不同可分为3类:

  • NearMiss-1:选择到最近的K个少数类样本平均距离最近的多数类样本
  • NearMiss-2:选择到最远的K个少数类样本平均距离最近的多数类样本
  • NearMiss-3:对于每个少数类样本选择K个最近的多数类样本,目的是保证每个少数类样本都被多数类样本包围

NearMiss-1和NearMiss-2的计算开销很大,因为需要计算每个多类别样本的K近邻点。另外,NearMiss-1易受离群点的影响,如下面第二幅图中合理的情况是处于边界附近的多数类样本会被选中,然而由于右下方一些少数类离群点的存在,其附近的多数类样本就被选择了。相比之下NearMiss-2和NearMiss-3不易产生这方面的问题。

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/124688.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Jenkins安装_ansible jenkins

    Jenkins安装_ansible jenkins前言jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境。环境准备:mac/Linuxdockerdocker拉去jenkins镜像先下载jenkins镜

  • python中的if语句怎么用_iserror函数的使用方法

    python中的if语句怎么用_iserror函数的使用方法if语句用来表示某种可能的情况,并如何处理该情况。if语句可以用来表示一种可能性、两种可能性或者多种可能性。1一种可能性单个的if语句表示一种可能性,if关键字后面跟着表达式,当表达式是True时,表示这种情况发生了,则执行指定的语句,即处理该情况,如图1所示。图1单个if语句的使用其中,图1①使用input()函数接收用户输入的数值,将其转换成int类型并保存在变量中;图1②通过if语句对变量x进行判断,如果x的值大于0,则输出“您输入的是一个非负数”这个信息(图1③)。需要注意.

  • 眼下流行的几种排课算法的介绍

    眼下流行的几种排课算法的介绍通用高校排课算法研究—-2.眼下流行的几种排课算法的介绍2眼下流行的几种排课算法的介绍2.1.自己主动排课算法1.问题的描写叙述我们讨论的自己主动排课问题的简化描写叙述例如以下:设要安排

  • mysql useradd_useradd 创建用户

    mysql useradd_useradd 创建用户useradd创建用户1.命令功能useradd创建一个新用户或者更改默认新用户信息。2.语法格式useraddoptionusernameuseradd-Doption参数选项选项选项说明-c新用户passwd文件中的说明栏(冒号分割第5栏)-d新用户的登录时的家目录-e用户被禁用时间。零时账号日期YYYY-MM-DD格式。-g指定用户对应组,用户组必须为系统现有组名称。-…

    2022年10月24日
  • IDEA插件-热部署:JRebel

    IDEA插件-热部署:JRebelspringboot项目开发过程中通常修改了某分部代码需要重启服务才能生效。通过JRebel插件可以实现热部署,避免了频繁重启服务。

  • 搭建网络SDN(企业网络环境搭建)

    1.     搭建环境要求:图1中控制器可以自主选择,既可选择各种开源的控制器(例如:Floodlight、Ryu、Nox、Beacon、Trema、OpenDaylight等),也可选择由本次大赛设备提供商所提供的闭源控制器。拓扑中各网络部件既可以是仿真环境实现(例如mininet,OpenvSwtich),有条件的队伍也可以通过物理设备实现,两种方案不影响必答题的评分。2.     操作

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号