机器学习丨数据均衡算法种类大全Python代码一文详解

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2022.07.20湖南

作者丨fanstuck@CSDN

编辑丨3D视觉开发者社区

content

前言

一、为什么要做数据均衡?

二、数据场景

1.大数据分布不均衡

2.小数据分布不均衡

三、均衡算法类型

1.过采样

2.欠采样

3.组合采样

四、算法具体种类

1.欠采样算法

2.过采样算法

对于整个数据建模来看,数据均衡算法属于数据预处理一环。当整个数据集从调出数据库到拿到手的时候,对于分类数据集来说类别一般都是不均衡的,整个数据集合也是较为离散的。因此不可能一拿到数据集就可进行建模,类别的不均衡会极大影响建模判断准确率。

其中,我们希望整个数据集合的类别数目都是相似的,这样其特征数据权重能够更好的计算出来,便于分类。对于预测模型也是如此。数据均衡是整个数学建模以及研究最重要不得不重视的一环,下面我将详细介绍数据均衡的方法以及运用的不同场景。

首先在进行实验之前我们要了解数据均衡的重要性,这是一件值得我们去投入众多精力的事。一旦数据均衡做的不好将极大可能影响模型的准确性。数据预处理决定我们模型的上限,在一些重要的数学建模比赛或者是SCI论文中,数据均衡绝对是浓墨重彩的一环。我们可以这样思考:

我们现在需要对一种疾病进行甄别,该病的发病概率为2%,而且很严重,100个人之间就可能会有2个人携带病毒。现在我们需要根据该病的特征数据构建能够判断患病的人。如果我们不进行数据均衡,倘若我们获得了10000份人的检测指标数据,其中有200人被标记为患病。那么我们立刻进行建模,因为患病人群数量极少,那么模型根据每一次特征权重计算反复迭代,获取最优的结果。那该模型为何不直接把判断人员数据归为健康人群呢。这样一来不管是判断的人群是否有无此病都能够得到98%的正确率甚至更高。那么我们的模型意义何在?

若是根据这个模型,再给10份数据其中有5份是患病者数据,那么此时建立的模型丝毫没有用处,甚至造成严重的后果。所以说数据均衡是整个建模中很重要的一环。如果我们一开始就把这200份患病者的指标进行数据填充与健康数据均衡,那样我们还能够发现获得该病之后的指标显著特征,为后续医生的判断提供有力的支持。因此数据均衡是必不可少的一环,现在让我们来了解根据数据集场景的不同我们该如何进行数据均衡。

拿两个我所遇到过的场景建模来说,第一个网络用户购买行为数据集来说,共拥有十三万行的数据中仅3千条用户购买行为数据,如图所示。这样大数据量的不均衡情况,即为大数据量不均衡。

大数据量的不均衡情况居多,但难免有一些指标很难测量的场景。就如医学疾病检测。

如图所示,该数据量小,仅有一万数据量,患病人数仅只有百名。这样的数据情况就为小数据分布不均衡。

这两类数据不均衡情况都有适合它们的处理算法。

在机器学习和深度学习中两者含义不同,但是思想方法类似。一个为数据中的采样方法,一个为图片的缩小和放大,这里重点解释机器学习的采样类型。

以下是过采样效果图,图一为原始数据集。

欠采样也被称为下采样,一般将将较大的类别数据进行缩减,直至和类型不同的小量数据集相对等。如我们将例子一的数据进行欠采样,13w的用户行为数据将缩减至6730条数据,进行建模的速度将会大大的加快。

以下是欠采样算法效果图:

不论是过采样和欠采样都会与原数据集存在一定的误差,过采样会导致很多样本的数据特征与原样本数据重叠导致难以分类清楚。而数据清洗技术恰好可以处理掉重叠样本,所以可以将二者结合起来形成一个组合采样,先过采样再进行数据清洗。

以Imbalancdsklearn库收录的算法来看,过采样共有11种方法,欠采样共有8种方法,组合采样有2种方法。

下面我们将从过采样-欠采样-组合采样大体三个类型的算法逐个了解其重算法种类的大致功能作用,以及使用场景:

(1)RandomUnderSampler

随机欠采样是十分快捷的方式,从多数类样本中随机选取一些剔除掉。但是随着采样方法的研究和发展随机欠采样已经很少使用。随机欠采样会损失大量的数据,可能被剔除的样本可能包含着一些重要信息,导致后续建模模型质量并不是很好。

(2)ClusterCentroids

通过使用K-Means聚类质心代替一个多数类的聚类,从而对多数类进行欠采样。通过带有N个聚类的KMeans算法拟合到多数类,并以N个聚类质心的坐标作为新的多数样本,从而保留N个多数样本。这和K-means方法原理是一样的。

CondensedNearestNeighbour使用1近邻的方法来进行迭代,来判断一个样本是应该保留还是剔除,具体的实现步骤如下:

集合C:所有的少数类样本;

1选择一个多数类样本(需要下采样)加入集合C,其他的2这类样本放入集合S;

3使用集合S训练一个1-NN的分类器,对集合S中的样本进行分类;

4将集合S中错分的样本加入集合C;

5重复上述过程,直到没有样本再加入到集合C.

(4)EditedNearestNeighbours

(5)RepeatedEditedNearestNeighbours

EditedNearestNeighbours删除其类别与其最近邻之一不同的多数类别的样本。这就是原理RepeatedEditedNearestNeighbours。通过更改内部最近邻算法的参数,在每次迭代中增加它,与AllKNN略有不同。

与RepeatedEditedNearestNeighbours不同的是,该算法内部的最近邻算法的近邻数在每次迭代中都会增加。

代码在上面统一概括了,此三类算法类似,只不过都以EditedNearestNeighbours为基础在此上进行优化:

(7)InstanceHardnessThreshold

InstanceHardnessThreshold使用分类器的预测来排除样本。所有以低概率分类的样本都将被删除。

(8)NearMiss

NearMiss算法实施一些启发式规则以选择样本。NearMiss-1从多数类中选择最近的少数类样本的平均距离最小的样本。NearMiss-2从多数类中选择与负类最远样本的平均距离最小的样本。NearMiss-3是一个两步算法:首先,对于每个少数样本,将保留其最近邻;然后,选择的大多数样本是与最近邻居的平均距离最大的样本。

NeighbourhoodCleaningRule使用EditedNearestNeighbours删除一些样本。此外,他们使用3个最近邻删除不符合此规则的样本。

代码已贴在CondensedNearestNeighbour那一栏:

(10)OneSidedSelection

使用了1-NN并用于TomekLinks删除被认为有噪声的样本。

(11)TomekLinks

TomekLinks:样本x与样本y来自于不同的类别,满足以下条件,它们之间被称之为TomekLinks:不存在另外一个样本z,使得d(x,z)

TomekLinks函数中的auto参数控制Tomek'slinks中的哪些样本被剔除.默认的ratio='auto'’移除多数类的样本,当ratio='ll'时,两个样本均被移除。

在随机过采样的基础上,通过样本构造一方面降低了直接复制样本代理的过拟合的风险,另一方法实现了样本的均衡。比如样本构造方法SMOTE(Syntheticminorityover-samplingtechnique)及其衍生算法。

(1)SMOTE

通过从少量样本集合中筛选的样本和及对应的随机数,通过两个样本间的关系来构造新的样本。SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如下图所示,算法流程如下:

1对于少数类中每一个样本,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。

2根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本,从其k近邻中随机选择若干个样本,假设选择的近邻为。

3对于每一个随机选出的近邻,分别与原样本按照如下的公式构建新的样本。

伪代码:

SMOTE会随机选取少数类样本用以合成新样本,而不考虑周边样本的情况,这样容易带来两个问题:

1如果选取的少数类样本周围也都是少数类样本,则新合成的样本不会提供太多有用信息。这就像支持向量机中远离margin的点对决策边界影响不大。

2如果选取的少数类样本周围都是多数类样本,这类的样本可能是噪音,则新合成的样本会与周围的多数类样本产生大部分重叠,致使分类困难。

总的来说我们希望新合成的少数类样本能处于两个类别的边界附近,这样往往能提供足够的信息用以分类。

从样本少的类别中随机抽样,再将抽样得来的样本添加到数据集中。然而这种方法如今已经不大使用了,因为重复采样往往会导致严重的过拟合,因而现在的主流过采样方法是通过某种方式人工合成一些少数类样本,从而达到类别平衡的目的。

BorderlineSMOTE、KMeansSMOTE、SVMSMOTE

SMOTE通过识别在重采样期间要考虑的特定样本来提出几种变体。边界版本(BorderlineSMOTE)将检测在两个类之间的边界中选择哪个点。SVM版本(SVMSMOTE)将使用使用SVM算法找到的支持向量来创建新样本,而KMeans版本(KMeansSMOTE)将在之前进行聚类,根据每个集群密度在每个集群中独立生成样本。

但是,如果数据集仅由分类特征组成,则应使用SMOTEN.:

fromimblearn.over_samplingimportSMOTEN#GenerateonlycategoricaldataX=np.array(['A']*10+['B']*20+['C']*30,dtype=object).reshape(-1,1)y=np.array([0]*20+[1]*40,dtype=np.int32)print(f'Originalclasscounts:{Counter(y)}')print()print(X[:5])print()sampler=SMOTEN(random_state=0)X_res,y_res=sampler.fit_resample(X,y)print(f'Classcountsafterresampling{Counter(y_res)}')print()print(X_res[-5:])print()(4)ADASYN

不平衡学习的自适应综合采样方法,

ADASYN思想:基于根据少数类数据样本的分布自适应地生成少数类数据样本的思想:与那些更容易学习的少数类样本相比,更难学习的少数类样本会生成更多的合成数据。ADASYN方法不仅可以减少原始不平衡数据分布带来的学习偏差,还可以自适应地将决策边界转移到难以学习的样本上。

分别在Kinetic数据集和NTU-RGB+D数据集上进行实验。

(1)SMOTETomek、SMOTEENN

SMOTE允许生成样本。但是,这种过采样方法对底层分布没有任何了解。因此,可能会生成一些噪声样本,例如,当不同的类别不能很好地分离时。因此,应用欠采样算法来清理噪声样本可能是有益的。文献中通常使用两种方法:(i)Tomek的链接和(ii)编辑最近邻清理方法。不平衡学习提供了两个即用型采样器SMOTETomek和SMOTEENN.

THE END
1.一文掌握大数据算法之:概述特点类型及难点等,值得收藏。2.3 大数据算法类型 大数据算法的类型,包含如下几种: 统计分析算法:如回归分析、假设检验,用于探索数据集中的统计特性。 机器学习算法:用于从数据中自动学习模式和规律,包括监督学习、无监督学习和强化学习。 图算法:处理社交网络、知识图谱等数据结构,常见算法有PageRank、社区发现等。 https://blog.csdn.net/wuyoudeyuer/article/details/141284911
2.大数据分析算法可分为哪些类型棉花糖的技术博客大数据分析算法可分为哪些类型 (参考:极客时间数据结构与算法专栏) 事后统计法:将代码运行一遍,通过统计、监控得到算法执行的时间和占用的内存大小。 事后统计法局限性: 1、非常依赖测试环境; 2、结果受数据规模的影响很大。 由于事后统计法有局限性,我们就需要不用具体的测试数据来测试,就能粗略估计算法执行https://blog.51cto.com/u_12218/12249232
3.Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)5、 海量数据的数据挖掘大数据从事的岗位 1、ETL工程师 2、数据仓库工程师 3、大数据开发工程师 4、Hadoop工程师 5、Spark/Flink工程师 6、大数据分析师 7、大数据算法工程师 8、大数据运维工程师 9、大数据解决方案 学习的技术 大数据项目流程 1、 数据生产 https://developer.aliyun.com/article/1403772
4.大数据一文总览数据科学全景:定律算法问题类型;什么是Pradeep Menon是一位在大数据,数据科学,数据架构领域拥有丰富经验以及影响力的专家。这是他今年所撰写的简述数据科学系列文章中的第一篇,主要介绍数据科学中的基本定律、常用算法以及问题类型,读者可以从中一窥数据科学的全景。 2016年,英国数学家,乐购俱乐部构架师Clive Humbly提出“数据是新能源”这样一个说法。他说:https://zhuanzhi.ai/document/ba50f489f166e5f700f1800aab8dea65
5.郑智航徐昭曦:大数据时代算法歧视的法律规制与司法审查——以一、算法歧视的基本类型 尽管法学界对于歧视没有统一的界定,但是,从社会心理学上讲,歧视是不同利益群体间发生的一种不平等的情感反应和行为。在传统的物理社会,歧视比较容易被辨识,而在大数据时代,算法歧视具有较强的隐蔽性,有时甚至是无意识的。在大数据挖掘和运用过程中,数据的挖掘方或算法的决策者往往会出现以下https://www.legal-theory.org/?mod=info&act=view&id=25344
6.李舴玉大数据算法技术影响下环境行政决策问责制的调适与完善对此,通过构建大数据算法决策特别工作组辅助式的问责主体结构、完善具体问责客体类型、明确决策者的算法解释义务、建立科学规范的问责程序、并对技术参与影响下的问责处理结果情形予以规范与细化,对大数据算法决策技术引入后的环境行政决策问责机制进行调适与完善,以为大数据算法技术参与下环境行政决策失当的有效问责提供支撑。https://www.jfdaily.com/sgh/detail?id=804806
7.大数据的详细定义三种类型的大数据 结构化数据:这类数据最容易整理和搜索,主要包括财务数据、机器日志和人口统计明细等。结构化数据很好理解,类似于 Excel 电子表格中预定义的行列布局。这种结构下的数据很容易分门别类,数据库设计人员和管理员只需要定义简单的算法就能实现搜索和分析。不过,即使结构化数据数量非常大,也不一定称得上大数https://blog.itpub.net/70041355/viewspace-3029299/
8.有哪些好的大数据挖掘算法?1、优点(1)k-平均算法是解决聚类问题的一种经典算法,算法简单、快速。(2)对处理大数据集,该算法https://www.zhihu.com/question/37979541/answer/734802421
9.省大数据局关于印发贵州省数据要素登记服务管理办法(试行)的通知(二)算法类型。说明所用算法的类型,如优化算法、预测算法、评价算法、生成式人工智能算法等。 (三)模型类型。说明所用模型的类型,如通用模型、专用模型等。 (三)适用场景。说明算法模型适用的范围,如生态环境、交通运输、科技创新、教育文化、地理空间、劳动就业、信用服务等场景。 https://dsj.guizhou.gov.cn/zwgk/xxgkml/zcwj/bmwj/202311/t20231115_83084263.html
10.大数据挖掘有哪些常用算法帆软数字化转型知识库大数据挖掘有哪些常用算法 大数据挖掘常用的算法包括决策树算法、支持向量机、k-means聚类、Apriori算法、随机森林、神经网络、贝叶斯分类器等。决策树算法是一种树形结构的决策支持工具,它使用树状模型来表示决策过程及其结果。在决策树中,每个节点表示一个属性的测试,每个分支代表一个测试结果,每个叶子节点表示一个类别https://www.fanruan.com/blog/article/612977/
11.大数据视角下的京津冀地区城市体系现状社区发现是一个复杂而有意义的过程,用于探测并揭示不同类型复杂网络中固有的社区结构[27].其中,Fast Unfolding算法是基于模块度对社区进行划分的算法,通过不断划分社区,使划分后整个网络的模块度不断增大.划分后的网络模块度越大,说明社区划分的效果越好.Fast Unfolding算法通过反复运算使模块度增大,并根据运算结果对网络https://jsci.cnu.edu.cn/qkll/a2020n/d6q/202006011.html
12.科学网—[转载]基于材料数值计算大数据的材料辐照机理发现然而,关于材料数值计算大数据研究价值的认识仍然处于起步阶段。另外,由于这些数值计算数据数目巨大、关联复杂,以及考虑到其所具有的领域价值等因素,材料数值计算大数据存储还没有一个很好的解决方案。这是因为材料数值计算大数据的存储要考量软件类型、模拟行为、数据类型等多个维度的因素,这些数据既有独立性又有相似性,而且https://wap.sciencenet.cn/home.php?mod=space&do=blog&id=1315554
13.一看就懂的大数据排序算法:如何给100万用户数据排序?之前写过一篇八种排序算法的博客,不过都是基于小数据量进行的排序,没有像这篇这样做大数据排序。文末会放出链接。 桶排序(Bucket sort) 首先,我们来看桶排序。桶排序,顾名思义,会用到“桶”,核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据https://cloud.tencent.com/developer/article/1879269
14.算法工程师软件工程师大数据工程师,傻傻分不清楚这个类别中的大数据算法,其实我们基本上可以理解算法工程师。 这是唯一跟算法工程师有交叉的部分 系统类 偏向于系统开发,比如我们经常听到的hadoop、云计算,就是属于这个类型。这里其实主要是hadoop(一个分布式系统,简单理解为另外一种和Windows或者是MacOS一样的东西)偏多,开发语言一般是Java。而另外数据管理员(DBA)和https://maimai.cn/article/detail?fid=845613115&efid=fwunO1cSXu6ZrJpdACNWjA