精华内容
下载资源
问答
  • SMOTE过采样方法解决类不平衡问题

    千次阅读 2018-12-25 12:55:16
    最近在帮师兄处理一个二分类问题,其中的类别不平衡问题很严重.然后不管用什么模型,roc_auc_score得到的结果都不好. 然后网上找资料想办法解决数据倾斜问题.看到了SMOTE过采样算法. SMOTE过采样算法   JAIR'2002...

          最近在帮师兄处理一个二分类问题,其中的类别不平衡问题很严重.然后不管用什么模型,roc_auc_score得到的结果都不好. 然后网上找资料想办法解决数据倾斜问题.看到了SMOTE过采样算法.

    SMOTE过采样算法

      JAIR'2002的文章《SMOTE: Synthetic Minority Over-sampling Technique》提出了一种过采样算法SMOTE。概括来说,本算法基于“插值”来为少数类合成新的样本。下面介绍如何合成新的样本。

            设训练集的一个少数类的样本数为 TT ,那么SMOTE算法将为这个少数类合成 NTNT 个新样本。这里要求 NN 必须是正整数,如果给定的 N<1N<1 那么算法将“认为”少数类的样本数 T=NTT=NT ,并将强制 N=1N=1 。

          考虑该少数类的一个样本 ii ,其特征向量为 xi,i∈{1,...,T}xi,i∈{1,...,T} :

          1. 首先从该少数类的全部 TT 个样本中找到样本 xixi 的 kk 个近邻(例如用欧氏距离),记为 xi(near),near∈{1,...,k}xi(near),near∈{1,...,k} ;

          2. 然后从这 kk 个近邻中随机选择一个样本 xi(nn)xi(nn) ,再生成一个 00 到 11 之间的随机数 ζ1ζ1 ,从而合成一个新样本 x

    xi1 :

     

     

                                                                 xi1=xi+ζ1⋅(xi(nn)−xi)

          3. 将步骤2重复进行 NN 次,从而可以合成 NN 个新样本:xinew,new∈1,...,Nxinew,new∈1,...,N。

          那么,对全部的 TT 个少数类样本进行上述操作,便可为该少数类合成 NTNT 个新样本。

          如果样本的特征维数是 22 维,那么每个样本都可以用二维平面上的一个点来表示。SMOTE算法所合成出的一个新样本 xi1xi1 相当于是表示样本 xixi 的点和表示样本 xi(nn)xi(nn) 的点之间所连线段上的一个点。所以说该算法是基于“插值”来合成新样本

     

    实现代码:

    from collections import Counter
    from sklearn.datasets import make_classification
    from imblearn.over_sampling import SMOTE # doctest: +NORMALIZE_WHITESPACE
    X, y = make_classification(n_classes=2, class_sep=2,
    weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
    n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)
    print('Original dataset shape %s' % Counter(y))
    
    sm = SMOTE(random_state=42)
    X_res, y_res = sm.fit_resample(X, y)
    print('Resampled dataset shape %s' % Counter(y_res))

    SMOTE过采样算法实现 有一个专门实现的库,imblearn.over_sampling.SMOTE这里合成了若干数量少的类别,最终两种类别的数量是一样的.

    输出结果:

     

    Original dataset shape Counter({1: 900, 0: 100})

    Resampled dataset shape Counter({0: 900, 1: 900}) 

    参考链接:

    https://imbalanced-learn.readthedocs.io/en/stable/generated/imblearn.over_sampling.SMOTE.html

    https://www.cnblogs.com/Determined22/p/5772538.html 

    展开全文
  • 分类中解决类别不平衡问题

    万次阅读 多人点赞 2018-05-11 22:19:31
    在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,...


    关注微信公众号【Microstrong】,我现在研究方向是机器学习、深度学习,分享我在学习过程中的读书笔记!一起来学习,一起来交流,一起来进步吧!

    本文同步更新在我的微信公众号里面,公众号文章地址:

    https://mp.weixin.qq.com/s?__biz=MzI5NDMzMjY1MA==&mid=2247484313&idx=1&sn=568015a62bf99ca5b6bd282b465244be&chksm=ec65321cdb12bb0a772814204ac5f48136c99f44a39ff34f5bde115ab5630948a40f747a39f0#rd

    本文同步更新在我的知乎专栏中:

    分类中解决类别不平衡问题 - Microstrong的文章 - 知乎https://zhuanlan.zhihu.com/p/36381828

    1.什么是类别不平衡问题

    如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例。

    类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,简称MvM)策略后产生的二分类任务扔可能出现类别不平衡现象,因此有必要了解类别不平衡性处理的基本方法。

    2.解决类别不平衡问题

    2.1欠采样方法

    (1)什么是欠采样方法

    直接对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。

    (2)随机欠采样方法

    随机欠采样顾名思义即从多数类中随机选择一些样样本组成样本集 。然后将样本集 中移除。新的数据集

    缺点:

    随机欠采样方法通过改变多数类样本比例以达到修改样本分布的目的,从而使样本分布较为均衡,但是这也存在一些问题。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息。

    为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能,出现了欠采样法代表性的算法EasyEnsemble和BalanceCascade算法。

    (3)欠采样代表性算法-EasyEnsemble

    算法步骤:

    1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作

    2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。

    3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。

    图1:EasyEnsemble算法

    (4)欠采样代表性算法-BalanceCascade

    BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:

    1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。

    2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。

    3)最后,进入下一轮迭代中,继续降低多数类数量。

    图2:BalanceCascade算法

    扩展阅读:

    Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.

    这篇论文提出了两种欠采样的方法:EasyEnsemble和BalanceCascade。

    2.2过采样方法

    (1)什么是过采样方法

    对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。

    (2)随机过采样方法

    随机过采样是在少数类中随机选择一些样本,然后通过复制所选择的样本生成样本集,将它们添加到中来扩大原始数据集从而得到新的少数类集合。新的数据集

    缺点:

    对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。

    为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE和Borderline-SMOTE算法。

    (3)过采样代表性算法-SMOTE

    SMOTE全称是Synthetic Minority Oversampling即合成少数类过采样技术。SMOTE算法是对随机过采样方法的一个改进算法,由于随机过采样方法是直接对少数类进行重采用,会使训练集中有很多重复的样本,容易造成产生的模型过拟合问题。而SOMT算法的基本思想是对每个少数类样本,从它的最近邻中随机选择一个样本 是少数类中的一个样本),然后在 之间的连线上随机选择一点作为新合成的少数类样本。

    SMOTE算法合成新少数类样本的算法描述如下:

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

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

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


    我们用图文表达的方式,再来描述一下SMOTE算法。

    1).先随机选定一个少数类样本

    2).找出这个少数类样本 x_{i} 的K个近邻(假设K=5),5个近邻已经被圈出。

    3).随机从这K个近邻中选出一个样本 \hat{x_{i}} (用绿色圈出来了)。

    4).在少数类样本 x_{i} 和被选中的这个近邻样本 \hat{x_{i}} 之间的连线上,随机找一点。这个点就是人工合成的新的样本点(绿色正号标出)。

    SMOTE算法摒弃了随机过采样复制样本的做法,可以防止随机过采样中容易过拟合的问题,实践证明此方法可以提高分类器的性能。但是SMOTE算法也存以下两个缺点:

    1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题。

    2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大。

    解释缺点2)的原因:结合前面所述的SMOTE算法的原理,SMOTE算法产生新的人工少数类样本过程中,只是简单的在同类近邻之间插值,并没有考虑少数类样本周围多数类样本的分布情况。如3图所示,绿色正号1、2分布在多数类样本周围,它们离多数类样本最近,这就导致它们有可能被划分成多数类样本。因此从3图中可以看出,SMOTE算法的样本生成机制存在一定的盲目性。

    图3:SOMTE算法结果

    为了克服以上两点的限制,多种不同的自适应抽样方法相继被提出,其中具有代表性的算法包括Borderline-SMOTE算法。

    扩展阅读:

    Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.

    这篇论文提出了SMOTE算法。

    (4)Borderline-SMOTE算法介绍

    对于Borderline-SMOTE算法最感兴趣的就是用于识别少数类种子样本的方法。在Borderline-SMOTE算法中,识别少数类种子样本的过程如下:

    1)首先,对于每个 ,确定一系列最近邻样本集,成该数据集为,且

    2)然后,对每个样本,判断出最近邻样本集中属于多数类样本的个数,即:

    3)最后,选择满足下面不等式的


    上面式子表明,只有最近邻样本集中多数类多于少数类的那些 才会被选中形成“危险集”(DANGER)。因此,DANGER集中的样本代表少数类样本的边界(最容易被错分的样本)。然后对DANGER集中使用SMOTE算法在边界附近产生人工合成少数类样本。

    我们可以看出,如果。 即: 的所有k个最近邻样本都属于多类。如4图所示的样本点C,我们就认为样本点C是噪声且它不能生成合成样本。

    图4:基于在边界上样本的数据建立

    通过上面的介绍,我们对Borderline-SMOTE算法有了一定的了解。为了让大家理解的更透彻这个算法,我再给大家画一个流程图,详细介绍一下。

    图5:Borderline-SMOTE算法流程图

    流程图5中,训练样本集为F,少数类样本

    1)步骤一:

    (i)计算少数类样本集中每一个样本在训练集F中的k个最近邻。

    (ii)然后,根据这k个最近邻对 中的样本进行归类:

    • 假设这k个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在集合中。
    • 反正k个最近邻都是少数类样本则该样本是远离分类边界的,将其放入S集合中。
    • 最后,K个最近邻即有多数类样本又有少数类样本,则认为是边界样本,放入B集合中。

    2)步骤二:

    (i)设边界样本集,计算B集合中的每一个样本,在少数类样本集中的K个最近邻,组成集合

    (ii)随机选出s(1<s<n)个最近邻。

    (iii)计算出它们各自与该样本之间的全部属性的差值

    (iv)然后乘以一个随机数 。如果 集合或S集合中的样本,则

    (v)最后生成的人工少数类样本为:

    3)步骤三:

    重复步骤2的过程,直到生成人工少数类样本的数目满足要求,达到均衡样本集的目的后结束算法。

    扩展阅读:

    Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.

    这篇文章提出了Borderline-SMOTE算法。

    2.3代价敏感学习(cost-sensitive learning)

    (1)代价矩阵

    采样算法从数据层面解决不平衡数据的学习问题;在算法层面上解决不平衡数据学习的方法主要是基于代价敏感学习算法(Cost-Sensitive Learning)。

    在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但是后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故;在信用卡盗用检查中,将正常使用误认为是盗用,可能会使用户体验不佳,但是将盗用误认为是正常使用,会使用户承受巨大的损失。为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。

    代价敏感学习方法的核心要素是代价矩阵,如表1所示。其中 表示将第类样本预测为第类样本的代价。一般来说, ;若将第0类判别为第1类所造成的损失更大,则 ;损失程度相差越大, 的值差别越大。当 相等时为代价不敏感的学习问题。

    表1:代价矩阵

    (2)代价敏感学习方法

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

    1).从学习模型出发,对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对不同的学习模型如感知机、支持向量机、决策树、神经网络等分别提出了其代价敏感的版本。以代价敏感的决策树为例,可以从三个方面对其进行改造以适应不平衡数据的学习,这三个方面分别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面都可以将代价矩阵引入。

    2).从贝叶斯风险理论出发,把代价敏感学习看成是分类结果的一种后处理,按照传统方法学习到一个模型,以实现损失最小为目标对结果进行调整,优化公式如下所示。此方法的优点在于它可以不依赖所用的具体分类器,但是缺点也很明显,它要求分类器输出值为概率。


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

    (3)AdaCost算法

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

    图6:Adaboost算法

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


    2.4不平衡学习的评价方法

    (1)F1度量

    这一部分涉及到模型的评价方法,如果你还没有学习过,可以看我的公众号之前发的关于这部分文章。同时,我也把链接地址贴出来,供大家快速学习。

    【错误率、精度、查准率、查全率和F1度量】详细介绍

    ROC曲线和AUC面积理解

    表2:分类结果混淆矩阵

    例如在癌症预测的场景中,假设没有患癌症的样本为正例,患癌症的样本为反例,反例占的比例很少(大概0.1%),如果直接把分类器设置为预测都是正例,那么精度和查准率的值都是99.9%。可见精度、错误率和查准率都不能表示不平衡数据下的模型表现。而F1值则同时考虑了少数类的查准率和召回率,因此能衡量不平衡数据下模型的表现。


    (2)G-Mean

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

    (3)ROC曲线和AUC面积

    我的这篇文章把ROC曲线和AUC面积分析的全面。ROC曲线和AUC面积可以很好的评价不平衡数据的模型表现。

    ROC曲线和AUC面积理解

    3.如何选择

    (1)在正负样本都非常少的情况下,应该采用数据合成的方式,例如:SMOTE算法和Borderline-SMOTE算法。

    (2)在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样的方法或者是加权的方法。

    总结:

    本文主要介绍了分类中类别不均衡时学习中常用的算法及评价指标,算法主要从数据和模型两个层面介绍,数据层面的算法主要关于过采样和欠采样以及改进的算法,模型方面主要讲解了基于代价的敏感学习。评价指标主要讲解了F1度量、G-Mean和ROC曲线AUC面积。


    Reference:

    (1)Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.

    (2)Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.

    (3)Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.

    (4)EasyEnsemble和BalanceCascade论文下载地址:https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tsmcb09.pdf

    (5)SMOTE算法期刊页面:https://www.jair.org/index.php/jair/article/view/10302

    (6)SMOTE算法论文下载地址:https://www.jair.org/index.php/jair/article/view/10302/24590

    (7)Borderline-SMOTE算法论文下载地址:http://sci2s.ugr.es/keel/keel-dataset/pdfs/2005-Han-LNCS.pdfhttp://

    (8)不均衡学习的抽样方法 - CSDN博客https://blog.csdn.net/u011414200/article/details/50664266

    (9)不平衡数据下的机器学习方法简介https://www.jianshu.com/p/3e8b9f2764c8

    (10)非平衡分类问题 | BalanceCascade方法及其Python实现https://zhuanlan.zhihu.com/p/36093594

    展开全文
  • 解决不平衡问题? 类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中...

    解决不平衡问题?

    类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,简称MvM)策略后产生的二分类任务扔可能出现类别不平衡现象,因此有必要了解类别不平衡性处理的基本方法。
    1、欠采样方法
    含义:直接对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。
    随机欠采样顾名思义即从多数类S_major中随机选择一些样样本组成样本集E 。然后将样本集E 从 S_major 中移除。新的数据集 S_new_major = S_major - E。
    缺点:

    随机欠采样方法通过改变多数类样本比例以达到修改样本分布的目的,从而使样本分布较为均衡,但是这也存在一些问题。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息。

    为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能,出现了欠采样法代表性的算法EasyEnsembleBalanceCascade算法。
    EasyEnsemble:
    1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作。
    2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。
    3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。
    BalanceCascade:
    BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:

    1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。

    2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。

    3)最后,进入下一轮迭代中,继续降低多数类数量。

    2、过采样方法
    含义:对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。
    随机过采样是在少数类S_min中随机选择一些样本,然后通过复制所选择的样本生成样本集E,将它们添加到S_min中来扩大原始数据集从而得到新的少数类集合S_new_min。新的数据集S_new_min = S_min + E。
    缺点:

    对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。

    为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE和Borderline-SMOTE算法。
    过采样代表性算法-SMOTE
    SMOTE全称是Synthetic Minority Oversampling即合成少数类过采样技术。SMOTE算法是对随机过采样方法的一个改进算法,由于随机过采样方法是直接对少数类进行重采用,会使训练集中有很多重复的样本,容易造成产生的模型过拟合问题。而SOMT算法的基本思想:
    1)对于少数类中的每一个样本Xi,以欧氏距离为标准计算它到少数类样本集S_min中所有样本的距离,得到其k近邻
    2)2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本Xi,从其k近邻中随机选择若干个样本Xi,假设选择的是 。
    3)对于每一个随机选出来的近邻
    Xi,分别与Xi按照如下公式构建新的样本。

    SMOTE算法也存以下两个缺点:
    1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题。
    2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大。

    ------------------------------------------
    解决办法总结:

    1. 过抽样
      抽样处理不平衡数据的最常用方法,基本思想就是通过改变训练数据的分布来消除或减小数据的不平衡。
      过抽样方法通过增加少数类样本来提高少数类的分类性能 ,最简单的办法是简单复制少数类样本,缺点是可能导致过拟合,没有给少数类增加任何新的信息。改进的过抽样方法通过在少数类中加入随机高斯噪声或产生新的合成样本等方法。
      注意:好像对svm没用

    2. 欠抽样方法通过减少多数类样本来提高少数类的分类性能,最简单的方法是通过随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类的一些重要信息,不能够充分利用已有的信息。

    3. 算法层面,采用代价敏感方法。
      (1)重构训练集的方法。不改变已有算法,而是根据样本的不同错分代价给训练集中的每一个样本赋一个权值,接着按权重对原始样本集进行重构。
      (2)引入代价敏感因子,设计出代价敏感的分类算法。通常对小样本赋予较高的代价,大样本赋予较小的代价,期望以此来平衡样本之间的数目差异。

    4. 特征选择
      样本数量分布很不平衡时,特征的分布同样会不平衡。尤其在文本分类问题中,在大类中经常出现的特征,也许在稀有类中根本不出现。因此,根据不平衡分类问题的特点,选取最具有区分能力的特征,有利于提高稀有类的识别率 。
      按照一个经验性的样本比例,挑选正负2个样本集,分别从中选择最能表示该类样本的特征集,然后将这些特征集合并作为最后挑选的特征。

    5. 不平衡学习的评价方法
      1.F1度量

      2.ROC曲线和AUC面积

      3.G-Mean
      在这里插入图片描述

    如何选择:

    (1)在正负样本都非常少的情况下,应该采用数据合成的方式,例如:SMOTE算法和Borderline-SMOTE算法。

    (2)在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样的方法或者是加权的方法。

    展开全文
  • 在LGBM的文档中,可以看到有两个参数来处理类别不平衡,分别是is_unbalance和scale_pos_weight 。 在上图中的介绍中,这2个参数只能选其一,能同时选。这说明了什么呢?这2个参数肯定是起到了相同的作用。这2个...

    本篇文章记录在分类问题中如何有效地类别不平衡问题,主要当作自己的读书笔记,所以写得可能有些乱。。。

    由于包imbalanced-learngithub地址)已经非常有效地实现了各种常见的处理类别不平衡问题的有效解决方法。因此,本文把侧重点放在了方法原理的介绍上,当然这些方法绝大部分都是在imbalanced-learn包中有实现的

    一、引言

    什么是类别不平衡问题?

    类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,以下是一些例子:

    • 每年,约 2% 的信用卡账户是伪造的。(多数的欺诈检测领域是极其不平衡的)

    • 针对某一病征的医学筛查通常涵盖了许多没有此病征的人,以检查出少数患者(例:美国的 HIV 感染率约为 0.4%)

    • 每年,硬盘驱动器故障的发生率约为 1%

    • 在线广告的转化率在 10^-3 到 10^-6 的范围区间内

    • 工厂的产品缺陷率一般在 0.1% 左右

    如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例。

    因此有必要了解类别不平衡性处理的基本方法。接下来,我们重点介绍常见的方法。

    二、过采样

    对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。即是过采样。

    2.1 随机过采样

    随机过抽样是增加少数类样本数量,可以事先设置多数类与少数类最终的数量比例,在保留多数类样本不变的情况下,根据比例随机复制少数类样本,在使用的过程中为了保证所有的少数类样本信息都会被包含,可以先完全复制一份全量的少数类样本,再随机复制少数样本使得满足数量比例,具体步骤如下:

    1. 首先在少数类 S m i n S_{min} Smin集合中随机选中一些少数类样本
    2. 然后通过复制所选样本生成样本集合 E E E
    3. 将它们添加到 S m i n S_{min} Smin中来扩大原始数据集从而得到新的少数类集合 S m i n − n e w S_{min-new} Sminnew

    S m i n S_{min} Smin中的总样本数增加了 |E|个新样本,且 S m i n − n e w S_{min-new} Sminnew的类分布均衡度进行了相应的调整,如此操作可以改变类分布平衡度从而达到所需水平。

    缺点:

    对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。

    为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE和Borderline-SMOTE算法

    2.2 SMOTE算法

    SMOTE全称是Synthetic Minority Oversampling即合成少数类过采样技术。

    SMOTE的主要思想是利用特征空间中少数类样本之间的相似性来建立人工数据,特别是,对于子集 S m i n ⊂ S S_{min}⊂ S SminS,对于每一个样本 x i ⊂ S m i n x_i\subset S_{min} xiSmin使用 K K K-近邻法,其中 K K K-近邻被定义为考虑 S m i n S_{min} Smin中的 K K K个元素本身与 x i x_i xi的欧氏距离在 n n n维特征空间 X X X中表现为最小幅度值的样本。由于不是简单地复制少数类样本,因此可以在一定程度上避免分类器的过度拟合,实践证明此方法可以提高分类器的性能。算法流程如下:

    1. 对于少数类中的每一个样本 x i x_i xi,以欧氏距离为标准计算它到少数类样本集 S m i n S_{min} Smin中所有样本的距离,得到 K K K近邻;
    2. 根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本 x i x_i xi,从其 K K K近邻中随机选择若干个样本,假设选择的近邻为 x ~ \tilde{x} x~
    3. 对于每一个随机选出的近邻 x ~ \tilde{x} x~,分别与原样本按照如下的公式构建新的样本: x n e w = x + r a n d ( 0 , 1 ) × ( x ~ − x ) x_{new}=x+rand\left(0,1\right)\times\left(\tilde{x}-x\right) xnew=x+rand(0,1)×(x~x)

    下图即为算法的示意图:

    CSDN图标

    缺点:

    1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题。

    2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大。

    解释缺点2)的原因:结合前面所述的SMOTE算法的原理,SMOTE算法产生新的人工少数类样本过程中,只是简单的在同类近邻之间插值,并没有考虑少数类样本周围多数类样本的分布情况。如下图所示,绿色正号1、2分布在多数类样本周围,它们离多数类样本最近,这就导致它们有可能被划分成多数类样本。因此,SMOTE算法的样本生成机制存在一定的盲目性。

    CSDN图标

    扩展阅读:

    Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.

    这篇论文提出了SMOTE算法。


    2.3 Borderline-SMOTE算法

    原始的SMOTE算法对所有的少数类样本都是一视同仁的,但实际建模过程中发现那些处于边界位置的样本更容易被错分,因此利用边界位置的样本信息产生新样本可以给模型带来更大的提升。Borderline-SMOTE便是将原始SMOTE算法和边界信息算法结合的算法。算法流程如下:

    1. 首先,对于每个 x i ⊂ S m i n x_{i}\subset S_{min} xiSmin确定一系列 K K K-近邻样本集,称该数据集为 S i − k N N S_{i-kNN} SikNN,且 S i − k N N ⊂ S S_{i-kNN}\subset S SikNNS
    2. 然后,对每个样本 x i x_i xi,判断出最近邻样本集中属于多数类样本的个数,即: ∣ S i − k N N ∩ S m a j ∣ |S_{i-kNN}\cap S_{maj}| SikNNSmaj
    3. 最后,选择满足下面不等式的 k 2 ≤ ∣ S i − k N N ∩ S m a j ∣ ≤ k \frac{k}{2}\le |S_{i-kNN} \cap S_{maj}|\le k 2kSikNNSmajk,将其加入危险集DANGER,

    上面式子表明,只有最近邻样本集中多数类多于少数类的那些 x i x_{i} xi 才会被选中形成“危险集”(DANGER)。因此,DANGER集中的样本代表少数类样本的边界(最容易被错分的样本)。然后对DANGER集中使用SMOTE算法在边界附近产生人工合成少数类样本。

    下图即为算法的示意图:

    CSDN图标

    我们可以看出,如果 ∣ S i − K N N ∩ S m a j j ∣ = k \left| S_{i-KNN}\cap S_{majj} \right| = k SiKNNSmajj=k 。 即: x i x_{i} xi 的所有 k k k个最近邻样本都属于多类。如图所示的样本点C,我们就认为样本点C是噪声且它不能生成合成样本。


    扩展阅读:

    Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.

    这篇文章提出了Borderline-SMOTE算法。


    三、欠采样

    直接对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。即是欠采样。

    3.1 随机欠采样

    随机欠采样顾名思义即从多数类 S m a j S_{maj} Smaj 中随机选择一些样样本组成样本集 E E E 。然后将样本集 E E E S m a j S_{maj} Smaj 中移除。新的数据集 S n e w − m a j = S m a j − E S_{new-maj}=S_{maj}-E Snewmaj=SmajE

    缺点:

    随机欠采样方法通过改变多数类样本比例以达到修改样本分布的目的,从而使样本分布较为均衡,但是这也存在一些问题。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息。

    Informed欠抽样算法可以解决传统随机欠采样造成的数据信息丢失问题,且表现出较好的不均衡数据分类性能。其中有一些集成(ensemble)的想法,主要有两种方法,分别是EasyEnsemble算法和BalanceCascade算法。

    3.2 EasyEnsemble算法

    它把数据划分为两部分,分别是多数类样本和少数类样本。算法流程如下:

    1)从多数类中有放回的随机采样 n n n次,每次选取与少数类数目相近的样本个数,那么可以得到 n n n个样本集合记作 { S 1 m a j , S 2 m a j , . . . , S n m a j } \left\{ S_{1maj},S_{2maj},...,S_{nmaj} \right\} {S1maj,S2maj,...,Snmaj}

    2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到 n n n个模型。

    3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这 n n n个模型的投票值。

    可以看到,EasyEnsemble的想法是多次随机欠抽样,尽可能全面地涵盖所有信息,算法特点是利用boosting减小偏差(Adaboost)、bagging减小方差(集成分类器)。实际应用的时候可以尝试选用不同的分类器来提高分类的效果。

    下图即为算法的示意图:

    CSDN图标

    3.3 BalanceCascade算法

    BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:

    1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。

    2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。

    3)最后,进入下一轮迭代中,继续降低多数类数量。

    算法流程如下:

    CSDN图标

    扩展阅读:

    Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.

    这篇论文提出了两种欠采样的方法:EasyEnsemble和BalanceCascade。


    四、综合采样

    目前为止我们使用的重采样方法几乎都是只针对某一类样本:对多数类样本欠采样,对少数类样本过采样。也有人提出将欠采样和过采样综合的方法,解决样本类别分布不平衡和过拟合问题,本部分介绍其中的SMOTE+Tomek Links和SMOTE+ENN。

    4.1 SMOTE+Tomek Links

    4.1.1 Tomek Links方法

    定义:Tomek links被定义为相反类最近邻样本之间的一对连接。

    符号约定:给定一个样本对 ( x i , x j ) \left(x_i,x_j\right) (xi,xj),其中 x i ∈ S m a j x_i \in S_{maj} xiSmaj x j ∈ S m i n x_j \in S_{min} xjSmin,记 d ( x i , x j ) d\left(x_i,x_j\right) d(xi,xj)是样本 x i x_i xi x j x_j xj之间的距离

    公式表示:如果不存在任何样本 x k x_k xk,使得 d ( x i , x k ) ≤ d ( x i , x j ) d\left( x_i,x_k \right) \le d\left( x_i,x_j \right) d(xi,xk)d(xi,xj),那么样本对 ( x i , x j ) (x_i,x_j) (xi,xj)被称为Tomek Links

    使用这种方法,如果两个样本来自Tomek Links,那么他们中的一个样本要么是噪声要么它们都在两类的边界上。所以Tomek Links一般有两种用途:在欠采样中:将Tomek Links中属于是多数类的样本剔除;在数据清洗中,将Tomek Links中的两个样本都剔除。

    4.1.2 SMOTE+Tomek Links

    SMOTE+Tomek Links方法的算法流程非常简单:

    1. 利用SMOTE方法生成新的少数类样本,得到扩充后的数据集T
    2. 剔除T中的Tomek Links对

    普通的SMOTE方法生成的少数类样本是通过线性插值得到的,在平衡类别分布的同时也扩张了少数类的样本空间,产生的问题是可能原本属于多数类样本的空间被少数类“入侵”,容易造成模型的过拟合。

    Tomek Links对寻找的是那种噪声点或者边界点,可以很好地解决“入侵”的问题,下图红色加号为SMOTE产生的少数类样本,可以看到,红色样本“入侵”到原本属于多数类样本的空间,这种噪声数据问题可以通过Tomek Links很好地解决。

    CSDN图标

    由于第一步SMOTE方法已经很好地平衡了类别分布,因此在使用Tomek Links对的时候考虑剔除所有的Tomek Links对。

    4.2 SMOTE+ENN

    SMOTE+ENN方法和SMOTE+Tomek Links方法的想法和过程都是很类似的:

    1. 利用SMOTE方法生成新的少数类样本,得到扩充后的数据集T
    2. 对T中的每一个样本使用KNN(一般K取3)方法预测,若预测结果与实际类别标签不符,则剔除该样本。

    五、常见机器学习模型本身处理类不平衡

    5.1 LightGBM

    LightGBM解决类不平衡的思路类似于代价敏感学习。

    5.1.1 二分类处理

    在LGBM的文档中,可以看到有两个参数来处理类别不平衡,分别是is_unbalancescale_pos_weight
    在这里插入图片描述
    在上图中的介绍中,这2个参数只能选其一,不能同时选。这说明了什么呢?这2个参数肯定是起到了相同的作用。这2个参数的关系是什么呢?在issue中找到了答案:

    if is_unbalance = true, weight of each positive sample / weight of each negative sample = (num_negative_sample / num_positive_sample) * scale_pos_weight_

    如果我们设置is_unbalance为True的话,那么scale_pos_weight就是默认值1,那么:每一个正样本的权重/每一个负样本的权重就等于负样本的样本数/正样本的样本数。

    如果我们设置scale_pos_weight的话,那么应该设置成number of negative samples / number of positive samples,因为在上图中已经写明了:scale_pos_weight代表的是正类的权重。这样也就和is_unbalance参数的意思对应上了。(注:很多人对于设置scale_pos_weight是懵逼的,我自己已经明确给出了答案,包括xgb也是一样的。)

    那么这2个参数是如何来解决类别不平衡的呢

    很明显,可以看到,通过设置这两个参数,可以得到正样本和负样本的权重,样本的权重是什么意思呢?我们知道,在LGBM进行分裂的过程中,我们求出了样本的一阶导数和二阶导数,在此基础上,就会乘以样本的权重。

    这里有一个issue涉及到了is_unbalance背后用的算法,方便读者进行更深入的了解。

    5.1.2 多分类处理

    LGBM对多分类的不平衡问题也进行了完美地处理。它设计了参数class weight。在文档中介绍如下:

    在这里插入图片描述
    一共提到了以下几点:

    1. 要不传入是dict,格式是class_weight={1: 1, 0: 2}这样;要不传入"balanced";要不传入是None。
    2. 如果传入的是dict,那么每个类的权重正如你传入的那样。
    3. 如果传入的是"balanced",那么会自动根据标签的值来算出每个类的权重,每个类的权重是与每个类别样本出现的次数成反比的。具体是根据公式: n_samples / (n_classes * np.bincount(y))。np.bincount(y)是numpy的一个很有趣的函数,不了解的可以参考该篇文档。我们更形象地说明,我在这里举一个例子,假如我们有10个样本,标签分别为 [ 0 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] [0,2,2,1,1,1,1,1,1,1] [0,2,2,1,1,1,1,1,1,1],这典型是不平衡的。那么np.bincount(y)输出的值为 [ 1 , 7 , 2 ] [1,7,2] [1,7,2],n_samples / (n_classes * np.bincount(y))输出的值分别为 10 3 ∗ 1 \frac{10}{3*1} 3110 10 3 ∗ 7 \frac{10}{3*7} 3710 10 3 ∗ 2 \frac{10}{3*2} 3210。这显然类别权重是与类别的样本个数成反比的。(注:这里有一个背景,就是lgbm中多类别必须设置为0,1,2,3…这样的形式)
    4. 如果传入的是None,那么每个类别的权重是一样的。
    5. 当然,与二分类一样,如果我们也传入了sample_weight,那么每个类的权重还要再乘以sample_weight。(注:sample_weight是LGBM是很少用到的一个功能,它一般是通过fit方法传入的,关于它的使用需要详细参考官方文档)

    PS: 我在翻看相关issue的时候,有一个题目是利用贝叶斯调参处理不平衡类问题的参数设置,很受启发,相关issue

    5.2 Xgboost

    XGB相比于LGBM,只有一个涉及到不平衡类的参数scale_pos_weight。在官方文档上是这么介绍的:
    在这里插入图片描述
    可以看到,定义与LGBM是相同的,即:如果我们设置scale_pos_weight的话,那么应该设置成number of negative samples / number of positive samples

    在xgboost中特意提到了处理不平衡数据集:
    在这里插入图片描述

    官网的意思大致可理解如下:

    1. scale_pos_weight 是用来调节正负样本不均衡问题的,用助于样本不平衡时训练的收敛。
    2. 如何仅仅关注预测问题的排序或者AUC指标,那么尽管可以调节此参数。
    3. 如果希望得到真正的预测概率则不能够通过此参数来平衡样本。什么意思呢,让我们来举个例子:假如我们现在需要通过体重来预测男女,有三个人体重分别为50kg、60kg、70kg。假设他们是男生的真正概率是:0.4、0.6、0.8。那么好,我现在模型预测出的概率为:0.7、0.8、0.9。如果讲预测概率的话,显然模型效果很差,但是我们预测的男生概率的排序以及 ROU 曲线(包括对应 AUC 值)都不会改变。如果我们想真正预测概率,而是利用一些参数,如将max_delta_step设置到一个有限的数(比如:1)可以获得效果提升.

    (注意LGBM的scale_pos_weight与XGB的scale_pos_weight的意义是一样的,也就是说,如果我们在LGB中使用了scale_pos_weight,那么得不到的概率也不再是真正的预测概率了)!

    在第3点中,如果我们想真正预测概率,当然还有其它一些参数可以调整,比如:

    • min_child_weight
      默认为1。是每个叶子里h的和至少是多少。对正负样本不均衡时的0-1分类而言,假设h在0.01附近,min_child_weight为1意味着叶子节点中最少需要包含100个样本。这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。
    • eta
      shrinkage参数,用于更新叶子节点权重时,乘以该系数,避免步长过大。参数值越大,越可能无法收敛。把学习率eta设置的小一些,小学习率可以使得后面的学习更加仔细。
    • max_delta_step
      每个叶子允许输出的最大增量步长。 如果该值设置为0,则表示没有约束。 如果将其设置为正值,则可以帮助使更新步骤更加保守。 通常不需要此参数,但当类非常不平衡时,它可能有助于逻辑回归。 将其设置为值1-10可能有助于控制更新。

    那么问题来了,源码到底是怎么利用 scale_pos_weight 来平衡样本的呢,在Issues 给出了如下:

    if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight

    可以看出,增大了少数样本的权重。这一点与LGBM是一样的。

    参考文献

    【1】imbalanced-learn

    【2】Imblearn package study(不平衡数据处理之过采样、下采样、综合采样)

    【3】分类中解决类别不平衡问题

    【4】机器学习算法系列(17):非平衡数据处理

    【5】xgboost 参数 scale_pos_weight 详解

    展开全文
  • 分类中常见的类别不平衡问题解决方法

    万次阅读 多人点赞 2017-08-29 11:01:32
    常见的类别不平衡问题解决方法 通常的分类学习方法中都有一个共同的假设,即不同类别的训练样例数目相同。如果不同类别的训练样例数目稍有差别,通常对分类影响不大,但是若差别很大,则会对学习造成影响,测试结果...
  • 解决类别不平衡问题的方法综述

    千次阅读 2020-06-13 17:08:47
    样本不平衡怎样解决(在loss前加系数) 数据不平衡  在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果。因为实际...
  • 例如,imbalanced-learn 这个python库,它实现了最相关的算法来解决类不平衡问题。 在这篇文章中,我们将了解什么是类别不平衡、将准确性作为不平衡类别的度量标准的问题是什么、什么是随机欠采样和随机过采样,...
  • 如何处理类别不平衡问题

    千次阅读 2018-11-29 16:38:57
    三种方法: 对较多的那个类别进行欠采样(under-sampling),舍弃一部分数据,使其与较少类别的数据相当 对较少的类别进行过采样... 阈值调整(threshold moving),将原本默认为0.5的阈值调整到 较少类别/(较少...
  • 解决分类样本不平衡问题

    千次阅读 2017-04-09 16:18:37
    样本不平衡会导致出现以下的问题: (1)少数所包含的信息很有限,难以确定少数数据的分布,即难以在内部挖掘规律,造成少数的识别率低; (2)很多分类算法采用分治法,样本空间的逐渐划分会导致数据碎片...
  • 类别不平衡(class-imbalance),是指分类任务中不同类别的训练样例数目差别很大的情况(例如,训练集正样例10个,反样例90个),本文假设正样例较少,反样例较多。 现有解决方案大体分为三,如下文所示。...
  • 如何解决数据不平衡问题

    千次阅读 2018-08-20 11:05:10
    数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一。 2. 数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都...
  • R语言解决数据不平衡问题

    千次阅读 2019-07-07 11:16:23
    R语言解决数据不平衡问题 一、项目环境 开发工具:RStudio R:3.5.2 相关包:dplyr、ROSE、DMwR 二、什么是数据不平衡?为什么要处理数据不平衡? ​ 首先我们要知道的第一个问题就是“什么是数据不平衡”,从字面...
  • 解决样本均衡的方法主要包括两:(1)数据层面,修改各类别的分布;(2)分类器层面,修改训练算法或目标函数进行改进。还有方法是将上述两进行融合。 数据层面 1. 过采样 (1) 基础版本的过采样:随机过...
  • 1.如何解决机器学习中数据不平衡问题 2.Learning from imbalanced data 原文 3.对于正负样本均衡的解决方法 4.2中论文的翻译总结 一、 问题背分析 1.背景 在学术研究与教学中,很多算法都有一个基本假设,那就是...
  • 现实情况中,很多机器学习训练...文章目录1 样本不平衡解决思路1.2 将不平衡样本当作离群点1.2 欠采样/过采样1.3 训练策略的优化1.3.1 Focal_Loss1.3.2 class_weight1.4 不平衡评价指标:不要ROC,用Precision/R...
  • 样本不平衡问题解决方法总结

    千次阅读 2019-06-25 11:55:00
    样本不平衡问题:数据集中,每个类别下的样本数目相差很大。以下以二分类问题为例进行讨论: 图示:坏样本占比:0.17%( 492(坏样本) : 284315(好样本)) 理想的样本应该是50:50,但...
  • 数据不平衡问题解决方案

    千次阅读 2020-06-11 22:44:13
    1.数据不平衡 1.1 数据不平衡介绍 数据不平衡,又称样本比例失衡。...根据数据量的多少和数据不平衡程度,可以将数据不平衡问题分为以几: (1)大数据+轻微数据不平衡(正负样本数量相差在一个数量级内) 如豆
  • 类别不平衡问题: 指的是在分类任务中不同类别的训练样本数目差异很大的问题。 我们简单举一个例子:如果我们要判断一名大学生究竟是研究生还是本科生,我们已知在大学中本科生的数量会远远高于研究生的数量,我们...
  • 问题定义:解决方案: 1. 做一次聚类分析。可以考察,其中是否有一些cluster明显的包含正样本。我们是否可以先做一个粗的分类器,将这一些样本分开,然后再看剩下来的数据是否均衡的状况会减轻很多。在剩余的...
  • 不平衡学习是机器学习问题的一个重要子域,其主要关注于如何从类别分布均衡的数据中学习数据的模式。在这篇文章中我们主要关注不平衡分类问题,特别地,我们主要关注类别极端不平衡...
  • 样本不平衡问题分析与部分解决办法

    万次阅读 多人点赞 2019-01-20 14:11:03
    最近工作中在处理文本分类问题遇到了分类均衡的问题,主要还是样本太少还同时非常的均衡正负样本1:10(类别不平衡比例超过4:1,就会造成偏移),就使用了SMOTE方法。 注意:在进行数据增广的时候一定要将测试集...
  • 数据不平衡是机器学习任务中的一个...在很多存在数据不平衡问题的任务中,我们往往更关注机器学习模型在少数上的表现,一个典型的例子是制造业等领域的缺陷产品检测任务,在这个任务中,我们希望使用机器学习方...
  • 本文转载自:http://blog.csdn.net/login_sonata/article/details/54290402建议同时跟间样本数量不平衡对分类模型性能的影响问题一块阅读什么是数据均衡?在分类中,训练数据均衡是指不同类别下的样本数目相差...
  • 不平衡数据分类

    万次阅读 2017-08-28 15:19:43
    引言 不管是在学术界还是工业界,不平衡学习已经吸引了越来越多的关注,不平衡数据的场景也出现在互联网...顾名思义即我们的数据集样本类别极均衡,以二分类问题为例,假设我们的数据集是$S$,数据集中的多数
  • 分类中数据不平衡问题解决经验

    万次阅读 2014-06-28 16:25:30
    问题:研究表明,在某些应用下,1∶35的比例就会使...很多分类算法采用分治法,样本空间的逐渐划分会导致数据碎片问题,这样只能在各个独立的子空间中寻找数据的规律,对于少数来说每个子空间中包含了很少的数据信息
  • SVM 解决类别不平衡问题(scikit_learn)

    千次阅读 2018-02-18 10:10:34
    解决数据类别不平衡的一个方法就是使用基于类别增加权重的CCC值 Cj=C∗wjCj=C∗wjC_j = C * w_j 其中,CCC是误分类的惩罚项,wjwjw_j是与类别 jjj 的出现频率成反比的权重参数,CjCjC_j 就是类别 jjj 对应的 ...
  • 在这篇文章中我们主要关注不平衡分类问题,特别地,我们主要关注类别极端不平衡场景下的二分类问题所面临的困难。 在这篇文章中我们将: 描述类别不平衡的定义与实际应用场景 给出不平衡场景下常用的评价...
  • 数据集分类不平衡的影响与处理

    千次阅读 2020-05-14 23:26:21
    本文介绍了机器学习、深度学习建模时,分类不平衡的影响和处理方法。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 181,166
精华内容 72,466
关键字:

解决类不平衡问题