精华内容
下载资源
问答
  • 在日常的分类任务中,「数据类别不平衡」是一个很常见的问题,如果对其加关注,则可能会严重影响模型性能。 对于「类别不平衡」这一问题,通常可以从三个角度入手,即「数据」、「模型」以及「评价指标」,本文将...

    前言

    如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

    在日常的分类任务中,「数据类别不平衡」是一个很常见的问题,如果对其不加关注,则可能会严重影响模型性能。

    对于「类别不平衡」这一问题,通常可以从三个角度入手,即「数据」、「模型」以及「评价指标」,本文将对这三个角度进行介绍。

    一、数据

    1.1 扩大数据集

    数据集类别不平衡,最直接的想法就是尽可能地增加数据(主要关注小样本数据),或许增加数据后分布就会变得平衡。

    1.2 对大类欠采样

    若数据集已经固定,则我们可以考虑随机去除大类中的一些数据,以此达到类别平衡的目的。

    常见的算法有 Tomek links,如下图所示,该算法找到数据集中非常接近的一个不同类别的点对,并删除其中的大类样本。
    在这里插入图片描述

    1.3 对小类过采样

    为使类别平衡,除了让多的变少,也可以让少的变多。在无法收集更多数据的情况下,我们可以考虑人为构造小类数据。

    常见的算法有 SMOTE,如下图所示,该算法随机找到一个小类点 x,再在其最近的 k 个小类点中随机选出 y,在 x 和 y 的连线上随机生成一个人造小类数据。
    在这里插入图片描述

    二、模型

    除了可以对数据集进行修正,我们也可以对模型训练或预测的过程进行更改,使其匹配类别不平衡的环境。

    2.1 模型训练过程

    首先很直接的想法是更换模型,例如采用决策树以及基于树集成的算法(Random Forest、Gradient Boosted Trees 等),这些算法不会对小类数据进行忽略,以此对类别不平衡的环境进行匹配。

    其次我们可以考虑在训练过程中,对不同类别的数据赋予不同的权重,如对小类数据赋予更大的权重,以此迫使模型对小类数据加以关注。

    最后我们也可以更换训练视角,从考虑分类任务转变为对异常数据进行检测,即将小类数据视为异常点。

    2.2 模型预测过程

    假设模型输出 y ∈ [ 0 , 1 ] y\in[0,1] y[0,1],当类别平衡时, y 1 − y > 1 \displaystyle\frac{y}{1-y}>1 1yy>1 即为正例;因此当类别不平衡时,可以根据
    y ⋅ m − ( 1 − y ) ⋅ m + > 1 \frac{y \cdot m^{-}}{(1-y) \cdot m^{+}}>1 (1y)m+ym>1
    来进行正例判别,其中 m + m^{+} m+ m − m^- m 分别表示正例、反例样本的数量。

    三、评价指标

    最后,面对类别不平衡问题,常见的 Accuracy 衡量标准不再适用,可以考虑如下一些新的评价指标:

    • 混淆矩阵(Confusion Matrix)
    • 准确率(Precision)、召回率(Recall)、F1-Score
    • ROC 曲线面积

    参考资料

    展开全文
  • 类别不平衡(class-imbalance)是指分类任务中不同类别的训练样例数目差别很大的情况。 在现实的分类任务中,我们会经常遇到类别不平衡的问题。一般来说,不平衡样本会导致训练模型侧重样本数目较多的类别,而...

    知乎主页https://www.zhihu.com/people/shuang-shou-cha-dai-53icon-default.png?t=LBL2https://www.zhihu.com/people/shuang-shou-cha-dai-53

    目录

    1:定义

    2:解决方法

    2.1:采样

    2.2:阈值调整(权重调整)

    2.3:模型融合

    2.4:多分类的不平衡问题

    2.5:其他方法


    1:定义

    类别不平衡(class-imbalance)是指分类任务中不同类别的训练样例数目差别很大的情况。 

    在现实的分类任务中,我们会经常遇到类别不平衡的问题。一般来说,不平衡样本会导致训练模型侧重样本数目较多的类别,而“轻视”样本数目较少类别,这样模型在测试数据上的泛化能力就会受到影响。比如在金融反欺诈中,欺诈交易的应该是很少部分,绝大部分交易是正常的,这就是一个正常的类别不平衡问题,假设数据集中有99个正例样本,1个负例样本。在不考虑样本不平衡的很多情况下,学习算法会使分类器放弃负例预测,因为把所有样本都分为正,也可获得高达99%的训练分类准确率。

    一般而言,如果类别不平衡比例超过4:1,那么其分类器会大大地因为数据不平衡性而无法满足分类要求的。因此在构建分类模型之前,需要对分类不平衡性问题进行处理。

    备注:相对的,这里不是说类别平衡的训练集一定比类别不平衡的训练集效果好,这里不一定能够保证,单对于大多数情况,类别平衡的数据对模型训练来说更加友好,因为模型不会倾向与类别数量较多的那一类别。


    2:解决方法

    2.1:采样

    采样时针对数据类别不平衡问题的最简单、最暴力的方法。

    欠采样:如果负样本太多,那就对负样本进行欠采样,就是随机的从负样本中抽取一部分样本,然后与正样本合并成训练集丢给模型训练。这样有个很明显的弊端,就是会造成严重的信息损失,数据收集不易,还要丢弃一部分,很显然不合理。

    过采样:如果正样本太少,那就对正样本进行过采样,就是对正样本进行复制。

    或者如果是NLP、CV邻域的任务,可以做一些数据增强,以此来增加正样本的数量。比如说CV中,可以对类别较少的图像进行旋转,缩放等操作来增加该类别的数据量。而对于一般的任务来说,如果仅仅通过简单的对正样本进行复制,这样会使模型在这正样本上过拟合,因为模型学习到太多遍这样的样本。

    上面介绍了对正样本进行过采样,会使模型产生过拟合风险,SMOTE也是基于过采样的方法,但是SMOTE可以降低过拟合的风险。

    SMOTE:通过对训练集中的小类数据进行插值来产生额外的小类样本数据。产生新的少数类样本,产生的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。

    总结:采样算法容易实现,运行速度快,且效果也不错。 
    在欠采样、过采样中的经验总结: 
    1. 考虑对大类下的样本(超过1万、十万甚至更多)进行欠采样,即删除部分样本; 
    2. 考虑对小类下的样本(不足1为甚至更少)进行过采样,即添加部分样本的副本; 
    3. 考虑尝试随机采样与非随机采样两种采样方法; 
    4. 考虑对各类别尝试不同的采样比例,不一定是1:1,有时候1:1反而不好,因为与现实情况相差甚远; 
    5. 考虑同时使用过采样与欠采样,对二者进行结合; 

    2.2:阈值调整(权重调整)

    对于二分类任务来说,一般会以0.5作为阈值来划分正负样本(比如逻辑回归),预测概率值大于0.5则判定为正样本,反之为负样本。对于类别不平衡的训练集来说,这个阈值就不再合适了,因为当使用负样本来更新模型权重时,权重的更新会使模型的输出尽量偏向于0,如果负样本太多,那么负样本对于模型权重的更新量就比较多,使得模型输出接近0的概率就比较大,所以可以根据正负样本所占的比例来调整阈值。比如正样本只占10%,则可以将阈值调整为0.1,输出概率大于0.1的则判定为正样本,这样可以很好的解决类别不平衡问题,调整阈值是个简单且高效的方法。

    在SVM中,如果是类别不平衡数据,可以设置class_weight='balanced'。

    # Create support vector classifier
    svc = SVC(kernel='linear', class_weight='balanced', C=1.0, random_state=0)
    
    # Train classifier
    model = svc.fit(X_std, y)
    

    在支持向量机中,C 是负责惩罚错误分类数据的超参数。决数据类别不平衡的一个方法就是使用基于类别增加权重的C值:

    C_{j}=C*w_{j}

    其中,C是误分类的惩罚项,w_{j}是与类别 j 的出现频率成反比的权重参数,c_{j}  就是类别 j 对应的加权C值,主要思路就是增大误分类少数类别带来的影响,保证少数类别的分类正确性,避免被多数类别掩盖。

    在scikit-learn 中,使用 svc 方法时,可以通过设置参数class_weight='balanced',参数‘balanced’ 会自动按照以下公式计算权值:

    其中,w_{j}为类别 j 对应权值,n为数据总数,k为类别数量,即数据有 k个种类,n_{j} 是类别j 的数据个数,因此类别 j 的样本越多,权重越小,反之越大。

    另外在XGBoost算法中,也可以设置参数值scale_pos_weight,官方文档中对该参数的介绍如下:

    可以看到,也是通过控制样本权重值来调整,即:如果设置scale_pos_weight的话,那么应该设置成number of negative samples / number of positive samples。

    2.3:模型融合

    模型融合不仅可以提升预测的准确性,其实也可以解决类别不平衡问题。

    比如对于正样本(10%)、负样本(90%)的训练集,可以将负样本均等拆分为9份(注意一定要同分布拆分),然后每一份都与正样本组合成为一个小训练集,得到9份类别平衡的数据。然后用9个模型分别去训练(可以使用有差异性的模型, 使预测精度更高),然后可以对9个模型的预测结果加权累加,作为最终的输出。最优的权重通常难以抉择,可以使用一个LR将9个模型的输出作为输入,通过训练让模型自己学习每个模型对应的权重即可。

    通过模型融合就可以保证每个模型的训练数据都是类别平衡的数据,并且还能提升预测的准确性。

    2.4:多分类的不平衡问题

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

    一共提到了以下几点:

    1. 要么传入是dict,格式是class_weight={1: 1, 0: 2}这样;要么传入"balanced";要么传入是None。如果传入的是dict,那么每个类的权重正如你传入的那样。
    2. 使用class weight仅仅适用多分类任务。
    3. 如果是二分类任务,使用参数is_unbalance 或者scale_pos_weight 。
    4. 如果传入的是"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),​10/(3*7),10/(3*2)。这显然类别权重是与类别的样本个数成反比的。与上面的SVM 权重设置的思路类似(注:这里有一个背景,就是LightGBM中多类别必须设置为0,1,2,3…这样的形式)
    5. 如果传入的是None,那么每个类别的权重是一样的。
    6. 当然,与二分类一样,如果我们也传入了sample_weight,那么每个类的权重还要再乘以sample_weight。(注:sample_weight是LGBM是很少用到的一个功能,它一般是通过fit方法传入的,关于它的使用需要详细参考官方文档)

    2.5:其他方法

    假如遇到了太稀疏的情况,可以构建一个白噪声的分布,比如说  ,然后加上原数据构建新的数据来让整体的数据变得平衡。或者用别的标准来看模型的好坏,比如说F1-Score

    知乎主页https://www.zhihu.com/people/shuang-shou-cha-dai-53icon-default.png?t=LBL2https://www.zhihu.com/people/shuang-shou-cha-dai-53

    展开全文
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达目录:1.什么是类别不平衡问题2.解决类别不平衡问题2.1欠采样方法(1)什么是欠采样方法(2)随机欠采样方法(3)欠...

    点击上方“小白学视觉”,选择加"星标"或“置顶

    重磅干货,第一时间送达36aa80925545c5252e007b108422925a.png

    目录:

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

    2.解决类别不平衡问题

    2.1欠采样方法

    (1)什么是欠采样方法

    (2)随机欠采样方法

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

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

    2.2过采样方法

    (1)什么是过采样方法

    (2)随机过采样方法

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

    (4)Borderline-SMOTE算法介绍

    2.3代价敏感学习

    (1)代价矩阵

    (2)代价敏感学习方法

    (3)AdaCost算法

    2.4不均衡学习的评价方法

    (1)F1度量

    (2)G-Mean

    (3)ROC曲线AUC面积

    3.如何选择算法

    总结

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

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

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

    2.解决类别不平衡问题

    2.1欠采样方法

    (1)什么是欠采样方法

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

    (2)随机欠采样方法

    随机欠采样顾名思义即从多数类4007efe4408afcc675dcce57d35f274b.png中随机选择一些样样本组成样本集e8fdb480025629e4d96811699c11a5cc.png。然后将样本集293bdb61012a53e85254d4d0fe31d0a8.pnga74f5d958d6c8ac600e130c9b04964eb.png中移除。新的数据集404bd93669d34946c2275c9621a9018d.png

    缺点:

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

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

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

    算法步骤:

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

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

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

    2be77a4e4ee0c0e2422e16edd33dffe0.png

    图1:EasyEnsemble算法

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

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

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

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

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

    141a068bf1d7927fc00486cc54cec2ae.png

    图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)随机过采样方法

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

    缺点:

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

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

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

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

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

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

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

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

    40e04cb608920b61fc3cfc654da69130.png

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

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

    0b5e3f73e657accfcd58298973f45884.png

    1e2c08e134ac8a10a613e245b1ab1c07.png

    2).找出这个少数类样本694c345f0bb0f48acc08dde3dee1ba75.png的K个近邻(假设K=5),5个近邻已经被圈出。

    34544718ec837bbebe1f2f499ffa1e50.png


    3).随机从这K个近邻中选出一个样本35452de6d50b8dc81352162896343ddc.png(用绿色圈出来了)。

    dc37f6762883f83c49d828f8459b9d64.png

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

    90b0163749fafe55320086b8810f1ff9.png

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

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

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

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

    db2ca97fa7db3da360fb525634a6fc35.png

    图3:SMOTE算法结果

    为了克服以上两点的限制,多种不同的自适应抽样方法相继被提出,其中具有代表性的算法包括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)首先,对于每个3eefec70ec0187949906e88b2b6943b6.png,确定一系列最近邻样本集,成该数据集为fa9a9098d215f69c70002e9c405c8c27.png,且22be4a700fd608ed5073ff479dd9a7d8.png

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

    2e7e06b07db6f4b57f4b768f5ac1ba72.png

    3)最后,选择满足下面不等式的5d9176eec85f1046723b4cc9a81963d6.png

    8e20192cd27897b4027246eee1b16a76.png

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

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

    8df2d2479e7966a20ca9be94f3d0c586.png

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

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

    5a3957f454855a71dea6b97650f4bc2b.png

    图5:Borderline-SMOTE算法流程图

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

    1)步骤一:

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

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

    • 假设这k个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在e182e3b601fdc9ec1bf819afe3421e60.png集合中。

    • 反正k个最近邻都是少数类样本则该样本是远离分类边界的,将其放入S集合中。

    • 最后,K个最近邻即有多数类样本又有少数类样本,则认为是边界样本,放入B集合中。

    2)步骤二:

    (i)设边界样本集25dae1a106c4ce81445defcaa2835f29.png,计算B集合中的每一个样本 a3b13fc1ebc61574eae09c5b36b0a506.png,在少数类样本集1571fd8301c7e857a68b01db22b47767.png中的K个最近邻,组成集合 68d45df7bb170afebdcea9c4737e211b.png

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

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

    (iv)然后乘以一个随机数d867f8cc912e4831cb4d52a953c04d41.png,637faea61d9bce76790642efffa1d876.png。如果a8bc394feeaf54aba4440e1e7618566f.png664ddd9dd84af6ce4eb7875d002119c2.png集合或S集合中的样本,则4c679d23bd3820422ccc6374bcf8d32e.png

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

    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所示。其中7f5c502a34c02393c5e1b990670b0ba7.png表示将第i 类样本预测为第j类样本的代价。一般来说,83b4c28f1abb19f2525e4c87658efe24.png;若将第0类判别为第1类所造成的损失更大,则57b47da2f7ca2e9d82326e4f899c5d7c.png ;损失程度相差越大,098a7f53d6dda808c6c3871bc90ca8c1.png的值差别越大。当73de0ad45bd513abde64f2768e9a4c69.png相等时为代价不敏感的学习问题。

    95fa3896beff6741ba38fd73fa62b8af.png

    表1:代价矩阵

    (2)代价敏感学习方法

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

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

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

    4f08609c93c7d6a2e00ac93cb60a8a8f.png

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

    (3)AdaCost算法

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

    65691db7d09aae5ddbc35c26a4801f25.png

    图6:Adaboost算法

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

    fd579ee7a3cd0caa1f5b6649dee82930.png

    2.4不平衡学习的评价方法

    (1)F1度量

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

    3f428f0e28966eb471fe7945a104da19.png

    表2:分类结果混淆矩阵

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

    6b8de705d08238264dff9e236a412372.png

    (2)G-Mean

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

    73966910eb071a4f63192a9e6dbe5826.png

    (3)ROC曲线和AUC面积

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

    3.如何选择算法

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

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

    总结:

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

    下载1:OpenCV-Contrib扩展模块中文版教程

    在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

    下载2:Python视觉实战项目52讲

    在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

    下载3:OpenCV实战项目20讲

    在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

    交流群

    欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

    042ed4bdd8dc8dcbd9de620c4145a4b6.png

    8d45bbd26ee81c83d717dce711577d34.png

    展开全文
  • 1.不平衡学习的基本概念及处理方法...分类中解决类别不平衡问题https://zhuanlan.zhihu.com/p/36381828 2.学习AdaCost对AdaBoost的改进方式:实现基于代价敏感的AdaCost算法https://zhuanlan.zhihu.com/p/39524415 ...

    1.不平衡学习的基本概念及处理方法分类:http://www.360doc.com/content/17/1023/09/42392246_697348454.shtml

    重点学习:分类中解决类别不平衡问题https://blog.csdn.net/weixin_42462804/article/details/99821091?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control

    https://zhuanlan.zhihu.com/p/36381828

    综述重点https://www.pianshen.com/article/70241747728/

    2.学习AdaCost对AdaBoost的改进方式:实现基于代价敏感的AdaCost算法https://zhuanlan.zhihu.com/p/39524415

    3.SMOTE算法的matlab实现:https://blog.csdn.net/weixin_42355132/article/details/108002371基于MATLAB,应用SMOTE算法对小样本类进行过采样

    python中可以调用imlbearn库的SMOTE接口,https://blog.csdn.net/qq_38016957/article/details/100115260?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

    其他人分享的代码:https://blog.csdn.net/jiede1/article/details/70215477

    # 使用imlbearn库中上采样方法中的SMOTE接口
    from imblearn.over_sampling import SMOTE
    # 定义SMOTE模型,random_state相当于随机数种子的作用
    smo = SMOTE(random_state=42)
    X_smo, y_smo = smo.fit_sample(X, y)

     

    展开全文
  • 这项工作主要研究一个经典而又非常实际且常见的问题:数据类别不平衡(也泛称数据长尾分布)下的分类问题。我们通过理论推导和大量实验发现,半监督和自监督均能显著提升不平衡数据下的学习表现。 目前代码(以及...
  • 更新中 参考文章 降采样,过采样,欠采样,子采样,下采样,上采样【转自EDNChina】 数据预处理–上采样(过采样)与下采样(降采样) 机器学习之类别不平衡问题 (3) —— 采样方法 图像重采样(上下采样) 图像子...
  • 作者&编辑 | 郭冰洋1 简介小伙伴们在利用公共数据集动手搭建图像分类模型时,有没有注意到这样一个问题呢——每个数据集不同类别的样本数目几乎都是一样的。...这就是本篇文章将要讨论的类别不平衡问...
  • 类别平衡问题 两个类,分别来自长尾数据集的头部和尾部(iNaturalist 2017 dataset) 假设有像上面那样的平衡的类。head:对于索引小的类,这些类有较多的样本。Tail:对于大索引的类,这些类的样本数量较少。黑色...
  • 类别不平衡问题全面总结

    千次阅读 2021-01-14 17:14:12
    类别不平衡问题(class-imbalance)是什么指分类任务中不同类别的训练样例数目差别很大的情况若不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有...
  • 分类中解决类别不平衡问题1. 类别不平衡数据集基本介绍2. 解决类别不平衡数据方法介绍2.1 过采样方法2.1.1 什么是过采样方法2.1.2 随机过采样方法2.2 欠采样方法2.2.1 什么是欠采样方法2.2.2 随机欠采样方法 1. 类别...
  • 针对前面所提到的,所以我认为可能性能的提升绝大部分来自于类别平衡了,当然正确的简单样本的引入也会对模型性能提升有帮助。 这个方法由此也会在半监督场景下作用明显,因此本来就没啥有标记样本,还如此的类别...
  • 1.类别不平衡 2.标注数据少,半监督学习 这篇文章,将这两个问题都包含进来了,那么看看作者是如何处理这两大难题。 参考: 1.论文地址:https://arxiv.org/abs/2102.09559 2.解说:...
  • objects={'dice_loss': dice_loss,'dice_coef':dice_coef}) 2.focal loss 和1的添加方法一样代码如下: #自定义损失函数1(解决类别不平衡focal_loss def binary_focal_loss(gamma=2, alpha=0.25): """ Binary form ...
  • 当遇到数据类别不平衡的时候,我们该如何处理。在Python中,有Imblearn包,它就是为处理数据比例失衡而生的。 安装Imblearn,默认是在python3.6版本及以上。在安装的时候注意要使用管理员的权限,否则可能会报错,...
  • 类别不平衡问题,你了解了吗?作者&编辑 | 郭冰洋1 简介小伙伴们在利用公共数据集动手搭建图像分类模型时,有没有注意到这样一个问题呢——每个数据集不同类别的样本数目几乎都是一样的。这是因为不同类别的样例...
  • 类别不平衡 imblance problem 查找一些资料 样本不均讨论: https://blog.csdn.net/sp_programmer/article/details/48047101 上采样、下采样、代价敏感 代价敏感:设计objective function的时候给不同...
  • 2 类别不平衡样本处理三招 2.1 加权处理 在绝大多数的模型中,模型可以使用类别权重,或则样本权重进行训练。 加权的操作很简单,步骤如下: 遍历每一个样本; 如果样本满足某一个要求,就定义权重; (例如在不平衡的...
  • 类别不平衡问题

    2021-02-25 15:56:45
    详解类别不平衡问题 卢总-类别不平衡问题的方法汇总 文章目录从多数类别中删除数据(ENN、Tomeklink、NearMiss)ENNNearMiss为少数类生成新样本(SMOTE、Borderline-SMOTE、ADASYN)集成方法EasyEnsemble算法...
  • 一、假设不同类别的训练样例数不同,且反例数量远大于正例 原始训练集:原始数据数量和维度 ①过采样(上采样oversampling):通过从已有正例中重复增加正例数量(正例中反复抽取并生成),使正、反例数量相当,...
  • 有各种各样的技术,你可以用来克服阶级不平衡。其中之一是设定class_weight。在此教程中,我们讨论如何为单个类设置类权重。它按比例重视少数群体及其代表性不足。 数据 让我们先创建问题数据集,目前,只需尝试从...
  • 如同CV领域当前的重点一样,我们更应该关注如何利用机器学习思想,更好地去解决NLP分类任务中的低耗时、小样本、鲁棒性、不平衡、测试检验、增量学习、长文本等问题。本文以QA形式探讨了以下问题:Q1: 如何科学地...
  • 不仅可以预测出类别,还可以得到近似概率预测,对于许多需利用概率辅助决策的任务很有用; 对数几率函数是任意阶可到的凸函数,有很好的数学性质。 2. 参数估计 下面的工作就是要确定 w 和 b \textbf{w}和b w和b 。...
  • 过抽样 抽样处理不平衡数据的最常用方法,基本思想就是通过改变训练数据的分布来消除或减小数据的不平衡。 过抽样方法通过增加少数类样本来提高少数类的分类性能 ,最简单的办法是简单复制少数类样本,缺点是可能...
  • 本文作者用python代码示例解释了3种处理不平衡数据集的可选方法,包括数据层面上的2种重采样数据集方法和算法层面上的1个集成分类器方法。分类是机器学习最常见的问题之一,处理它的最佳方法是从分析和探索数据集...
  • 类别不平衡问题类别不平衡问题,顾名思义,即数据集中存在某一类样本,其数量远多于或远少于其他类样本,从而导致一些机器学习模型失效的问题。例如逻辑回归即适合处理类别不平衡问题,例如逻辑回归在欺诈检测问题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,358
精华内容 21,743
关键字:

类别不平衡