机器学习——下采样(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)
blank

相关推荐

  • Android startActivityForResult()的用法

    Android startActivityForResult()的用法领导说我基础差,我也没反驳,知识忘记了,用到的时候查一下不久行了吗,自己最近在回顾知识好好的在补充一下,今天礼拜日,趁着空闲事件记录一下简单的知识startActivityForResult()也是经常使用到比如我们做城市选择点击城市,返回点击的城市等等,使用startActivityForResult()方法你需要清楚1startActivityForResult(Inten…

  • Oracle 启动ASMM管理

    Oracle 启动ASMM管理1.ASMM的作用从Oracle10g开始,Oracle提供了自动SGA的管理(简称ASMM,AutomaticSharedMemoryManagement)新特性。所谓ASMM,就是指我们不再需要手工设置sharedpool、bufferpool等若干内存池的大小,而是为SGA设置一个总的大小尺寸即可。Oracle数据库会根据系统负载变化,自动调整各组件的大小,从而使得内存始终能够…

  • LINUX之中iptables 开放端口

    LINUX之中iptables 开放端口比如要开放3306端口;方式:vi/etc/sysconfig/iptables编辑文件iptables-AINPUT-ptcp–dport3306-jACCEPT添加这行然后保存serviceiptablesrestart重启服务serviceiptablesstop关闭iptables假如遇到奇葩问题用…

    2022年10月21日
  • php JSON数据格式化方法

    php JSON数据格式化方法

    2021年12月30日
  • 行列式运算法则 矩阵的运算及其运算规则:「建议收藏」

    行列式运算法则 矩阵的运算及其运算规则:「建议收藏」1、三角形行列式的值,等于对角线元素的乘积。计算时,一般需要多次运算来把行列式转换为上三角型或下三角型2、交换行列式中的两行(列),行列式变号(交换)3、行列式中某行(列)的公因子,可以提出放到行列式之外。(倍乘)(注:矩阵是全部元素都乘,都提取)4、行列式的某行乘以a,加到另外一行,行列式不变,常用于消去某些元素。(倍加)5、若行列式中,两行(列)完全一样,则行列式为0;可以推论,如果两…

    2022年10月22日
  • 内网穿透 隧道_内网渗透攻击

    内网穿透 隧道_内网渗透攻击本文研究DNS隧道的一个经典工具,iodine

    2022年10月28日

发表回复

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

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