不平衡数据下的机器学习方法简介

快速了解机器学习中过采样(SMOTE)问题 当我们创建一个逻辑回归模型时,往往会遇到这样一个问题,那就是两类标签的数量相差非常大,可能达到几十万甚至上百万,导致创建的模型往往不是很准确。那么怎样才能避免或者是尽量减小误差呢?这里我们就要来学习一种方法——过采样。 阅读详情

不平衡数据下的机器学习方法简介

来源:http://www.jianshu.com/p/3e8b9f2764c8
字数3729  阅读2856  评论8 

机器学习已经成为了当前互联网领域不可或缺的技术之一,前辈们对机器学习模型的研究已经给我们留下了一笔非常宝贵的财富,然而在工业界的应用中我们可以看到,应用场景千千万万,数据千千万万但是我们的模型却依然是那些,在机器学习的应用中对数据的处理与分析往往扮演着比模型更加重要的角色,本文针对机器学习应用数据处理的一个方面即“不平衡数据”下的机器学习方法进行了简单介绍,我的博客。


引言

不管是在学术界还是工业界,不平衡学习已经吸引了越来越多的关注,不平衡数据的场景也出现在互联网应用的方方面面,如搜索引擎的点击预测(点击的网页往往占据很小的比例),电子商务领域的商品推荐(推荐的商品被购买的比例很低),信用卡欺诈检测,网络攻击识别等等。

问题定义

那么什么是不平衡数据呢?顾名思义即我们的数据集样本类别极不均衡,以二分类问题为例,假设我们的数据集是$S$,数据集中的多数类为$S_maj$,少数类为$S_min$,通常情况下把多数类样本的比例为$100:1$,$1000:1$,甚至是$10000:1$这种情况下为不平衡数据,不平衡数据的学习即需要在如此分布不均匀的数据集中学习到有用的信息。

为什么不平衡学习

传统的学习方法以降低总体分类精度为目标,将所有样本一视同仁,同等对待,如下图1所示,造成了分类器在多数类的分类精度较高而在少数类的分类精度很低。机器学习模型都有一个待优化的损失函数,以我们最常用最简单的二元分类器逻辑回归为例,其损失函数如下公式1所示,逻辑回归以优化总体的精度为目标,不同类别的误分类情况产生的误差是相同的,考虑一个$500:1$的数据集,即使把所有样本都预测为多数类其精度也能达到$500/501$之高,很显然这并不是一个很好的学习效果,因此传统的学习算法在不平衡数据集中具有较大的局限性。


图1 传统学习在不平衡数据下的缺点

公式1 逻辑回归的交叉熵损失函数

不平衡学习的方法

既然传统的学习算法在不平衡数据中具有较大的局限性,那么针对不平衡数据集又有怎样的解决方案呢?解决方法主要分为两个方面,第一种方案主要从数据的角度出发,主要方法为抽样,既然我们的样本是不平衡的,那么可以通过某种策略进行抽样,从而让我们的数据相对均衡一些;第二种方案从算法的角度出发,考虑不同误分类情况代价的差异性对算法进行优化,使得我们的算法在不平衡数据下也能有较好的效果。

采样

随机采样

采样算法通过某一种策略改变样本的类别分布,以达到将不平衡分布的样本转化为相对平衡分布的样本的目的,而随机采样是采样算法中最简单也最直观易懂的一种方法。随机采样主要分为两种类型,分别为随机欠采样和随机过采样两种。随机欠采样顾名思义即从多数类$S_maj$中随机选择少量样本$E$再合并原有少数类样本作为新的训练数据集,新数据集为$S_min+E$,随机欠采样有两种类型分别为有放回和无放回两种,无放回欠采样在对多数类某样本被采样后不会再被重复采样,有放回采样则有可能。随机过采样则正好相反,即通过多次有放回随机采样从少数类$S_min$中抽取数据集$E$,采样的数量要大于原有少数类的数量,最终的训练集为$S_maj+E$。

可以看到随机采样通过改变多数类或少数类样本比例以达到修改样本分布的目的,从而让样本分布较为均衡,但是他们也存在一些问题。对于随机欠采样,由于采样的样本要少于原样本集合,因此会造成一些信息缺失,未被采样的样本往往带有很重要的信息。对于随机过采样,由于需要对少数类样本进行复制因此扩大了数据集,造成模型训练复杂度加大,另一方面也容易造成模型的过拟合问题。针对这些问题提出了几种其它的采样算法。

SMOTE算法

SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如图2所示,算法流程如下。

  1. 对于少数类中每一个样本$x$,以欧氏距离为标准计算它到少数类样本集$S_min$中所有样本的距离,得到其k近邻。
  2. 根据样本不平衡比例设置一个采样比例以确定采样倍率$N$,对于每一个少数类样本$x$,从其k近邻中随机选择若干个样本,假设选择的近邻为$\hat{x}$。
  3. 对于每一个随机选出的近邻$\hat{x}$,分别与原样本按照如下的公式构建新的样本。



    图2 SMOTE算法

    SMOTE算法摒弃了随机过采样复制样本的做法,可以防止随机过采样易过拟合的问题,实践证明此方法可以提高分类器的性能。但是由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠(Overlapping)的问题,为了解决SMOTE算法的这一缺点提出一些改进算法,其中的一种是Borderline-SMOTE算法,如图3所示。
    在Borderline-SMOTE中,若少数类样本的每个样本$x_i$求k近邻,记作$S_i-knn$,且$S_i-knn$属于整个样本集合$S$而不再是少数类样本,若满足


    则将样本$x_i$加入DANGER集合,显然DANGER集合代表了接近分类边界的样本,将DANGER当作SMOTE种子样本的输入生成新样本。特别地,当上述条件取右边界,即k近邻中全部样本都是多数类时,此样本不会被选择为种样本生成新样本,此情况下的样本为噪音。

    图3 Borderline-SMOTE算法

Informed Undersampling

既然SMOTE可以解决随机过采样容易发生的模型过拟合问题,对应地也有一些采样方法可以解决随机欠采样造成的数据信息丢失问题,答案是Informed undersampling采样技术,informed undersampling采样技术主要有两种方法分别是EasyEnsemble算法和BalanceCascade算法。
EasyEnsemble算法如下图4所示,此算法类似于随机森林的Bagging方法,它把数据划分为两部分,分别是多数类样本和少数类样本,对于多数类样本$S_maj$,通过n次有放回抽样生成n份子集,少数类样本分别和这n份样本合并训练一个模型,这样可以得到n个模型,最终的模型是这n个模型预测结果的平均值。BalanceCascade算法是一种级联算法,BalanceCascade从多数类$S_maj$中有效地选择N且满足$\midN\mid=\midS_min\mid$,将N和$\S_min$合并为新的数据集进行训练,新训练集对每个多数类样本$x_i$进行预测若预测对则$S_maj=S_maj-x_i$。依次迭代直到满足某一停止条件,最终的模型是多次迭代模型的组合。


图4 EasyEsemble算法

代价敏感学习

代价矩阵

采样算法从数据层面解决不平衡数据的学习问题,在算法层面上解决不平衡数据学习的方法主要是基于代价敏感学习算法(Cost-Sensitive Learning),代价敏感学习方法的核心要素是代价矩阵,我们注意到在实际的应用中不同类型的误分类情况导致的代价是不一样的,例如在医疗中,“将病人误疹为健康人”和“将健康人误疹为病人”的代价不同;在信用卡盗用检测中,“将盗用误认为正常使用”与“将正常使用识破认为盗用”的代价也不相同,因此我们定义代价矩阵如下图5所示。标记$C_ij$为将类别j误分类为类别i的代价,显然$C_00=C_11=0$,$C_01,C_10$为两种不同的误分类代价,当两者相等时为代价不敏感的学习问题。


图5 代价矩阵

代价敏感学习方法

基于以上代价矩阵的分析,代价敏感学习方法主要有以下三种实现方式,分别是:

  1. 从学习模型出发,着眼于对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对不同的学习模型如感知机,支持向量机,决策树,神经网络等分别提出了其代价敏感的版本。以代价敏感的决策树为例,可从三个方面对其进行改进以适应不平衡数据的学习,这三个方面分别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面中都可以将代价矩阵引入,具体实现算法可参考参考文献中的相关文章。
  2. 从贝叶斯风险理论出发,把代价敏感学习看成是分类结果的一种后处理,按照传统方法学习到一个模型,以实现损失最小为目标对结果进行调整,优化公式如下所示。此方法的优点在于它可以不依赖所用具体的分类器,但是缺点也很明显它要求分类器输出值为概率。

  3. 从预处理的角度出发,将代价用于权重的调整,使得分类器满足代价敏感的特性,下面讲解一种基于Adaboost的权重更新策略。

AdaCost算法

让我们先来简单回顾一下Adaboost算法,如下图6所示。Adaboost算法通过反复迭代,每一轮迭代学习到一个分类器,并根据当前分类器的表现更新样本的权重,如图中红框所示,其更新策略为正确分类样本权重降低,错误分类样本权重加大,最终的模型是多次迭代模型的一个加权线性组合,分类越准确的分类器将会获得越大的权重。


图6 Adaboost算法


AdaCost算法修改了Adaboost算法的权重更新策略,其基本思想是对于代价高的误分类样本大大地提高其权重,而对于代价高的正确分类样本适当地降低其权重,使其权重降低相对较小。总体思想是代价高样本权重增加得大降低得慢。其样本权重按照如下公式进行更新。其中$\beta_+$和$\beta_-$分别表示样本被正确和错误分类情况下$\beta$的取值。



不平衡学习的评价方法

正确率和F值

正确率和F值的计算都是基于混淆矩阵(Confusion Matrix)的,混淆矩阵如下图7所示,每行代表预测情况,每列代表实际类别,TP,FP,FN,TN分别代表正类正确分类数量,预测为正类但是真实为负类,预测为负类但是真实为正类,负类正确分类数量。


图7 混淆矩阵


正确率(Accuracy)和F值的计算如下式所示。可见正确率或错误率并不能表示不平衡数据下模型的表现,对于不平衡数据即使全部预测为多数类也可以达到较高的正确率较低的错误率,而F值同时考虑到了少数类的准确率和召回率,因此能衡量不平衡数据下模型的表现,其中$\beta$取值通常为1。



G-Mean

G-Mean是另外一个指标,也能评价不平衡数据的模型表现,其计算公式如下。


ROC曲线和AUC

为了介绍ROC曲线首先引入两个是,分别是FP_rate和TP_rate,它们分别表示1-负类召回率和正类召回率,显然模型表示最好的时候FP_rate=0且TP_rate=1,我们以FP_rate为横坐标,TP_rate为纵坐标可以得到点(FP_rate,TP_rate),通过调整模型预测的阈值可以得到不同的点,将这些点可以连成一条曲线,这条曲线叫做接受者工作特征曲线(Receiver Operating Characteristic Curve,简称ROC曲线)如下图8所示。显然A点为最优点,ROC曲线越靠近A点代表模型表现越好,曲线下面积(Area Under Curve, AUC)越大,AUC是衡量模型表现好坏的一个重要指标。


图8 ROC曲线

总结

本文介绍了不平衡数据下学习的常用方法及其评价指标,方法主要从数据和模型两个层面考虑,数据方面的方法主要为采样算法,模型方面主要基于代价敏感学习。本文主要来源于论文“Learning from Imbalanced Data”,借着组会主讲的契机作了总结分享给各位,感谢师姐精美的PPT给了我很多灵感。

过采样:SMOTE算法 过采样的技术有非常多,最常见的就是随机过采样和SMOTE过采样。 随机过采样就是从少的类中进行随机进行采样然后拼接上去,这种效果很多时候和加权差不大。还有一种较常见的也是现在比赛中出现最多的采样方法,SMOTE采样。 SMOTE的示意图如下, SMOTE算法的生成过程为: 对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。 根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn。 对于每 阅读详情

相关推荐

通过 SMOTE 及其变体过采样处理不平衡数据

在这篇文章中,我将解释使用 SMOTE、SVM SMOTE、BorderlineSMOTE、K-Means SMOTE 和 SMOTE-NC 进行过采样/上采样。我将通过一个实际示例进行解释,在该示例中我们应用这些方法来解决不平衡的机器学习问题,以了解它们的影响。

challeypeng的专栏 1万+

smote过采样算法

类不平衡的数据集训练得到的分类器最大的问题就是:分类器对较大数量类别的数据的识别精度较高,对较小类别数据的识别精度较低,这是由于分类器在训练时学习了较多的较大数量类别的特征,而学习到的较小数量类别的特征较少,进而训练完成的分类器容易将较小类别的数据识别为较大类别的数据。如图所示,红色点和蓝色点属于两个不同的类别,其中红色点类别的数量为400,蓝色点类别的数量为200,蓝色点类别为少数点类别。如图所示,图中共有20个点,其中红色星号的点为目标点,即计算该点的最近邻点,绿色方格点为该点的4个最近邻点。

qq_36911630的博客 2343

机器学习之不平衡数据集的处理方法

机器学习之不平衡数据集的处理方法1,不平衡数据集1.1 定义1.2 举例1.3 实例1.4 导致的问题2. 不平衡数据集常用的处理方法2.1 扩充数据集2.2 对数据集进行重采样 1,不平衡数据集 1.1 定义 不平衡数据集指的是数据集各个类别的样本数目相差巨大。以二分类问题为例,假设正类的样本数量远大于负类的样本数量,这种情况下的数据称为不平衡数据 1.2 举例 在二分类问题中,训练集中class 1的样本数比上class 2的样本数的比值为60:1。使用逻辑回归进行分类,最后结果是其忽略了class 2

Harry的博客 3055

SMOTE算法进行过采样

【代码】SMOTE算法进行过采样。

glorious69的博客 7428

机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解

特征名称描述取值范围作用Patient ID患者的唯一标识符,用于区分不同的个体。1到5110(整数)主要用于数据管理和分析,但在建模时通常会被移除,因为它对预测中风没有直接帮助。Gender(性别)患者的性别。Male(男性)、Female(女性)、Other(其他)性别可能与中风的风险相关,例如某些研究表明男性中风的风险可能高于女性。Age(年龄)患者的年龄。0.08岁到82岁年龄是中风的重要风险因素之一,通常中风在老年人中更为常见。Hypertension(高血压)

斯人若彩虹,遇上方知有! 1419

机器学习 | 使用加权逻辑回归处理类别不平衡数据

不平衡数据集指的是在分类问题中,各个类别的样本量极不均衡的情况。以二分类问题为例,当正类的样本数量远大于负类的样本数量,特别是当多数类样本的比例接近100:1时,这样的数据就被称为不平衡数据。不平衡数据集不仅存在于二分类问题中,也存在于多分类问题中。加权逻辑回归是一种在逻辑回归的基础上引入权重机制的方法。在普通的逻辑回归中,每个样本都被视为具有相同的权重,但在实际应用中,不同样本的重要性可能并不相同。

python收藏家的博客 2668

SMOTE算法

SMOTE算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。如图所示:

now 1万+

ML:MetaCost算法(代价敏感学习/分类任务中的不平衡数据集)的简介(调整少样本权重)、使用方法、案例应用之详细攻略

​ ML:MetaCost算法(代价敏感学习/分类任务中的不平衡数据集)的简介(调整少样本权重)、使用方法、案例应用之详细攻略 目录 MetaCost算法的简介 MetaCost算法的案例应用 MetaCost算法的简介 MetaCost算法(代价敏感学习/分类任务中的不平衡数据集)的概述:基分类器训练→计算错误代价→训练元模型→预测与调整 痛点 一般决策树算法更偏重于大类,追求总的分类准确率。而MetaCost认为应该考虑每个类的分类效果,而不是总的分类效果,主要是因为每个类别被误分类的代价

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 2295

不平衡数据下的机器学习方法简介 imbalanced time series classification

 imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page=2 这个专利可以去国家专利局网站查询,有具体文档。   https://www.jianshu.com/p/3e8b9f2764c8   机器学习已经成为了当前互联网领域不...

weixin_33762130的博客 258

gmean:广义平均数。-matlab开发

广义均值,也称为幂均值、Holder 均值或均值的 Kolmogorov-Negumo 函数,是包括调和、几何和算术均值在内的勾股均值的抽象。 它被定义为, Mk = [1/n(x1^k + x2^k + ... + xn^k)]^1/k 其中: k 是所需平均值的指标功效(-1 = 调和平均值;0 = 几何平均值;1 = 算术平均值;2 = 均方根)。 虽然不能直接将 k = 0 置入,但根据 L'Hopital 定理,存在 k 趋于零的极限, Mk = lim k->0 [1/n(x1^k + x2^k + ... + xn^k)]^1/k = (x1x2 ... xn)^1/k 输入: x - 输入数据向量k - 所需功率(-1 = 调和平均值;0 = 几何平均值;1 = 算术平均值;2 = 均方根) 输出: y - 期望均值

Diebold-Mariano检验

给定两个预测的预测结果,我们希望比较他们的预测结果,以用于预测模型精度的比较。 Diebold-Mariano检验本质是一个t检验,用于检验替代预测的两个损失序列的平均值是否相等。即,它是一系列损失差的零均值的t检验。在存在自相关的情况下,它使用损失差分时间序列标准差的自相关一致性估计。 注意,在使用DM检验式时,假设损失序列是平稳的。 另外,DM检验在小样本数据时往往会拒绝零假设。对于小样本数据,推荐Harvey, Leybourne and Newbold (HLN)检验【1】; 参考文献 【1】htt

weixin_43948357的博客 6565

机器学习数据不平衡问题及其解决方法

数据不平衡是机器学习任务中的一个常见问题。真实世界中的分类任务中,各个类别的样本数量往往不是完全平衡的,某一或某些类别的样本数量远少于其他类别的情况经常发生,我们称这些样本数量较少的类别为少数类,与之相对应的数量较多的类别则被称为多数类。在很多存在数据不平衡问题的任务中,我们往往更关注机器学习模型在少数类上的表现,一个典型的例子是制造业等领域的缺陷产品检测任务,在这个任务中,我们希望使用机器学习方...

weixin_37801695的博客 1万+

Windows系统监控实战:Grafana+Prometheus+node_exporter配置全攻略

本文提供了一套完整的Windows系统监控解决方案,详细介绍了如何使用Grafana、Prometheus和node_exporter(Windows版为windows_exporter)构建可视化监控平台。从环境准备、组件安装配置,到数据可视化与常见问题排查,手把手指导您实现从数据采集到仪表盘展示的全过程,帮助您从被动救火转向主动预警,有效保障Windows服务器稳定运行。

assembly8low的博客 247

不平衡数据的机器学习

不平衡数据的场景出现在互联网应用的方方面面,如搜索引擎的点击预测(点击的网页往往占据很小的比例),电子商务领域的商品推荐(推荐的商品被购买的比例很低),信用卡欺诈检测,网络攻击识别等等。问题定义那么什么是不平衡数据呢?顾名思义即我们的数据集样本类别极不均衡,以二分类问题为例,假设我们的数据集是$S$,数据集中的多数类为$S_maj$,少数类为$S_min$,通常情况下把多数类样本的比例为$100:

皮皮blog 1万+

STM32面试知识点总结分析

通过Boot引脚设定,寻找初始地址初始化栈指针 __initial_sp指向复位程序 Reset_Hander设置异常中断 HardFault_Handler设置系统时钟 SystemInit调用C库函数 _main。

嵌入式技术开发 2513

Unreal Engine Profiler:动画系统性能分析教程_2024-07-23_03-05-38.Tex

Unreal Engine Profiler 是一个内置的性能分析工具,它可以帮助开发者识别和解决游戏中的性能瓶颈。Profiler 提供了详细的性能数据,包括 CPU 使用率、GPU 负载、内存使用情况等,特别针对动画系统,可以查看动画蓝图的执行时间、骨骼动画的计算成本、以及动画混合和重定向的效率。通过这些数据,开发者可以定位到具体的问题,比如哪些动画状态消耗了过多的 CPU 时间,或者哪些动画资源导致了内存泄漏。

825

不平衡数据的机器学习(一)

欢迎大家!机器学习ML)使计算机能够通过算法从数据中学习,以做出明智的决策、自动化任务并提取有价值的见解。一个经常引起注意的特定方面是不平衡数据,其中某些类别可能比其他类别有显著较少的样本。本书提供了深入了解和导航倾斜数据复杂性的指南。你将获得在机器学习环境中管理不平衡数据集的最佳实践见解。尽管不平衡数据可能带来挑战,但重要的是要理解,解决这种不平衡的技术并非普遍适用。它们的相关性和必要性取决于各种因素,如领域、数据分布、你正在优化的性能指标以及商业目标。在采用任何技术之前,建立基线是至关重要的。

龙哥盟 1117

013:无人机航线规划的概念

航线规划是无人机任务规划的核心环节,它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素,包括飞行时间、飞行距离、能源消耗、飞行安全等。

qq_31762031的博客 2443
上一篇: shell学习网址
下一篇: 重磅!8大策略让你对抗机器学习数据集里的不均衡数据
kejiaming
博客等级 码龄15年 19粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值