文章目录

  • 一、数据不平衡问题
  • 二、常见处理方法
    • 1.数据相关处理
      • 1.1 欠采样
      • 1.2 过采样
    • 2.模型相关处理
      • 2.1 模型算法 – Cost Sensitive算法
      • 2.2 模型算法 – MetaCost算法
      • 2.3 模型算法 – Focal Loss
    • 3.评价指标相关处理
  • 三、自然语言处理中的数据增强

一、数据不平衡问题

  所谓的数据不平衡指的是不同类别的样本量差异非常大,或者少数样本代表了业务的关键数据(少量样本更重要),需要对少量样本的模式进行很好的学习。样本类别分布不平衡主要出现在分类相关的建模问题上。 样本类别分布不均衡从数据规模上可以分为大数据分布不均衡和小数 据分布不均衡两种:

  • 大数据分布不均衡——整体数据规模较大,某类别样本占比较 小。例如拥有1000万条记录的数据集中,其中占比5万条的少数分类样本便于属于这种情况。
  • 小数据分布不均衡(这种情况更难处理)——整体数据规模小,则某类别样本的数量也少,这种情况下,由于少量样本数太少,很难提取特征进行有/无监督算法学习,此时属于严重的小数据样本分布不均衡。 例如拥有100个样本,20个A类样本,80个B类样本。

  数据不平衡的典型场景有:

  • NER: O类别(other类)数量非常大,某些类别数量很少
  • 分类: 某些类别数量非常少
  • CTR预估:广告点击率,通常只有百分之几,点击的样本占比非常少,大量的未点击样本
  • 异常检测:比如恶意刷单、黄牛订单、信用卡欺诈、电力窃电、设备故障等,这些数据样本所占的比例通常是整体样本中很少的一部分,以信用卡欺诈为例,刷实体信用卡的欺诈比例一般都在0.1%以内。
  • 罕见事件的分析:罕见事件分析与异常事件的区别在于异常检测通常都有预先定义好的规则和逻辑,并且大多数异常事件都对会企业运营造成负面影响,因此针对异常事件的检测和预防非常重要;但罕见事件则无法预判,并且也没有明显的积极和消极影响倾向。

二、常见处理方法

1.数据相关处理

  • 欠采样:在少量样本数量不影响模型训练的情况下,可以通过对多数样本欠采样,实现少数样本和多数样本的均衡。
  • 过采样:在少量样本数量不支撑模型训练的情况下,可以通过对少量样本过采样,实现少数样本和多数样本的均衡。
1.1 欠采样

  欠采样(也叫下采样,under-sampling,US)方法通过减少分类中多数类样本的样本数量来实现样本均衡。 通过欠采样,在保留少量样本的同时,会丢失多数类样 本中的一些信息。经过欠采样,样本总量在减少。

  欠采样有两种方式:

  • 随机删除一些多量样本,使少量样本和多量样本数量达到平衡(也许会删除掉重要有意义的信息,改变数据分布)

  • 基于聚类的下采样方法-原型生成 (Prototype generation)
    PG 算法主要是在原有样本的基础上生成新的子集样本来实现样本均衡,具体做法如下:

    下图所示为三类共2000个样本点的集合,每个样本维度为2,label1个数为1861,label2个数为108,label3个数为31。利用PG算法完成数据均衡后,样本整体分布没有变化。

1.2 过采样

  过采样(也叫上采样,over-sampling)方法通过增加分类中少数样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题。经过改进的过采样方法:通过在少数类中加入随机噪声、干扰数据或 通过一定规则产生新的合成样本。

  过采样有两种方式:

  • 过采样 – 随机复制(很容易过拟合,会改变分布)
    随机复制即对少量样本进行复制后达到样本均衡的效果以提升模型效果。如下图所示,在进行复制前, Linear SVC只找到一个超平面——即认为样本集中仅两类样本。随机复制后, Linear SVC找到了另外两个超平面。

  • 过采样 – 样本构建
      在随机过采样的基础上,通过样本构造,一方面降低了直接复制样本带来的过拟合风险,另一方面 实现了样本均衡。比较典型的样本构造方法有SMOTE(Synthetic minority over-sampling technique)及其衍生算法。
      SMOTE算法通过从少量样本集合中筛选的样本xix_ixi​和xjx_jxj​及对应的随机数0<λ<10 < \lambda < 10<λ<1,通过两个样本间的关系来构建新的样本xn=xi+λ(xj−xi)x_n=x_i+\lambda(x_j−x_i)xn​=xi​+λ(xj​−xi​)。SMOTE算法是在真正样本之间插入新样本。这个方法在nlp找中不太好使,因为文本维度太高,SMOTE效果会不佳。
      由于SMOTE算法构建样本时,是随机的进行样本点的组合和λ\lambdaλ参数设置,因此会有以下2个问题:

    1).在进行少量样本构造时,未考虑样本分布情况,对于少量样本比较稀疏的区域,采用与少量样本比较密集的区域相同的概率进行构建,会使构建的样本可能更接近于边界;只是简单的在同类近邻之间插值,并没有考虑少数类样本周围多数类样本的分布情况。
    2).当样本维度过高时,样本在空间上的分布会稀疏,由此可能使构建的样本无法代表少量样本的特征。

      针对上述问题,衍生出SMOTEBoost、Borderline-SMOTE、Kmeans-SMOTE等。

    1). SMOTEBoost把SMOTE算法和Boost算法结合,在每一轮分类学习过程中增加对少数类的样本的权重,使得基学习器 (base learner) 能够更好地关注到少数类样本。
    2). Borderline-SMOTE在构造样本时考虑少量样本周围的样本分布,选择少量样本集合(DANGER集合)——其邻居节点既有多量样本也有少量样本,且多量样本数不大于少量样本的点来构造新样本。
    3). Kmeans-SMOTE包括聚类、过滤和过采样三步。利用Kmeans算法完成聚类后,进行样本簇过滤,在每个样本簇内利 用SMOTE算法构建新样本。

    通过比较不同算法得到的样本构造,可得以下结论:

    • 利用样本构建的方法,可以得到新的少量样本;
    • 利用不同算法构建的新样本在数量和分布上不同,其中利用SMOTE算法构建的新样本,由于没有考虑原始样本分布情况,构建的新样本会受到“噪声”点的影响。同样ASASYN算法只考虑了分布密度而未考虑样本分布,构建的新样本也会受到“噪声”点的影响。 Borderline-SMOTE算法由于考虑了样本的分布,构建的新样本能够比较好的避免“噪声”点的影响。Kmeans-SMOTE算法由于要去寻找簇后再构建新样本,可构建的新样本数量受限。
    • 注:“噪声”点对应类别上属于少量样本,但是分布上比较靠近边界或者与多量样本混在一起。

    实例见:不均衡样本集采样—SMOTE算法与ADASYN算法

2.模型相关处理

  模型算法:通过引入有倚重的模型算法,针对少量样本着重拟合,以提升对少量样本特征的学习。上述的过采样和欠采样都是从样本的层面去克服样本的不平衡,从算法层面来说,克服样本不平衡。在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。

  • 例如:在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯 了“一次错误”,但是后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命 的最佳时机;
  • 再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故;
  • 在信用卡盗用检查中,将正常使用误认为是盗用,可能会使用户体验不佳,但是将盗用误认为是 正常使用,会使用户承受巨大的损失。

为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价” (unequal cost)。
  模型相关处理有如下手段:

  • 损失函数
    赋予不同的权重
    Focal loss
    再谈类别不平衡问题:调节权重与魔改Loss的综合分析
  • 模型集成
  • 异常点检测算法
  • 小样本学习
2.1 模型算法 – Cost Sensitive算法

  代价敏感方法的核心要素是代价矩阵,如下表所示。costijcost_{ij}costij​ 表示将第iii类样本预测为第jjj类样本的代价。一般来说, costij=0cost_{ij}=0costij​=0;若将第0类判定为第1类所造成的损失更大,则cost01>cost10cost_{01} >cost_{10}cost01​>cost10​;损失程度相差越大, cost01cost_{01}cost01​ 与 cost10cost_{10}cost10​ 的值差别越大。当 cost01cost_{01}cost01​ 与 cost10cost_{10}cost10​ 相等时为代价不敏感的学习问题。

  • 从学习模型出发,对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对不同的学习模型如感知机、支持向量机、决策树、神经网络等分别提出了其代价敏感的版本。以代价敏感的决策树为例,可以从三个方面对其进行改造以适应不平衡数据的学习,这三个方面分
    别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面都可以将代价矩阵引入。
  • 从贝叶斯风险理论出发,把代价敏感学习看成是分类结果的一种后处理,按照传统方法学习到一个模型,以实现损失最小为目标对结果进行调整。此方法的优点在于它可以不依赖所用的具体分类器,但是缺点也很明显,它要求分类器输出值为概率。
  • 从预处理的角度出发,将代价用于权重调整,使得分类器满足代价敏感的特性。
2.2 模型算法 – MetaCost算法
  • 在训练集中多次采样,生成多个模型。
  • 根据多个模型,得到训练集中每条记录属于每个类别的概率。
  • 计算训练集中每条记录的属于每个类的代价, 根据最小代价,修改类标签。
  • 训练修改过的数据集,得到新的模型。
2.3 模型算法 – Focal Loss

  Focal loss 是在标准交叉熵损失基础上修改得到的,通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。以二分类为例
正常的交叉熵损失为:
CE(PC,X)=−I(y=c)∗log(pc)CE(P_C,X)=-I(y=c)*log(p_c)CE(PC​,X)=−I(y=c)∗log(pc​)
通过增加一个系数(添加的系数与难度相关),来控制少数类别的样本对总loss的贡献
CE(PC,X)=−α(c)∗I(y=c)∗log(pc)CE(P_C,X)=-\alpha(c)*I(y=c)*log(p_c)CE(PC​,X)=−α(c)∗I(y=c)∗log(pc​)
Focal loss:
CE(PC,X)=−(1−pc)γI(y=c)∗log(pc)CE(P_C,X)=-(1-p_c)^{\gamma}I(y=c)*log(p_c)CE(PC​,X)=−(1−pc​)γI(y=c)∗log(pc​)
Focal loss+类别的重加权:
CE(PC,X)=−α(c)(1−pc)γI(y=c)∗log(pc)CE(P_C,X)=-\alpha(c)(1-p_c)^{\gamma}I(y=c)*log(p_c)CE(PC​,X)=−α(c)(1−pc​)γI(y=c)∗log(pc​)

3.评价指标相关处理

  在样本不均衡情况下,使用准确率作为评价指标,会出现Accuracy paradox问题。即将负类全部预测为正确,准确率依旧很高。所以,只用准确率作评判,模型会过拟合。这个时候就需要使用confusion matrix(混淆矩阵),F1,AUC来作为评价指标。

  • confusion matrix(混淆矩阵)
  • F1
    F1=2∗TP样本总数+TP−TNF1 = \frac{2 * TP}{样本总数 + TP - TN}F1=样本总数+TP−TN2∗TP​
  • AUC
    AUC表示ROC曲线下方的面积,计算AUC前,需要利用混淆矩阵来计算ROC,计算ROC需要两个变量TPRTPRTPR、FPRFPRFPR,然后绘制ROC曲线,横轴FPR,纵轴TPR, 这是在实际建模中经常使用的衡量分类模型的效果的指标
    TPR=TPTP+FNFPR=FPFP+TNTPR=\frac{TP}{TP+FN}\\FPR=\frac{FP}{FP+TN}TPR=TP+FNTP​FPR=FP+TNFP​
    伪阳性率(FPR) :判定为正例却不是真正例的概率
    真阳性率(TPR) :判定为正例也是真正例的概率
  • G-mean
    真阳性率与真阴性率乘积的开根号
  • PR-AUC曲线
    纵坐标查准率,即精确率(Precision),精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。
    precision=TPTP+FPprecision=\frac{TP}{TP+FP}precision=TP+FPTP​
    横坐标查全率,即召回率(Recall),召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。
    recall=TPTP+FNrecall=\frac{TP}{TP+FN}recall=TP+FNTP​
    精确率与召回率其实就是分母不同,一个分母是预测为正的样本数,另一个是原来样本中所有的正样本数。

ROC-Curve和PR-Curve的区别:

负例增加了10倍,ROC曲线没有改变,而PR曲线则变了很多。作者认为这是ROC曲线的优点,即具有鲁棒性,在类别分布发生明显改变的情况下依然能客观地识别出较好的分类器。在类别不平衡的背景下,负例的数目众多致使FPR的增长不明显,导致ROC曲线呈现一个过分乐观的效果估计。
  ROC-Curve和PR-Curve的应用场景如下:

  • ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例。

  • 如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。

  • 如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。

  • 类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。

  • 最后可以根据具体的应用,在曲线上找到最优的点,得到相对应的precision,recall,f1 score等指标,去调整模型的阈值,从而得到一个符合具体应用的模型。

三、自然语言处理中的数据增强

  • UDA
    Unsupervised Data Augmentation,一个半监督的学习方法,减少对标注数据的需求,增加对未标注数据的利用
    UDA使用的语言增强技术—Back-translation:回译能够在保存语义不变的情况下,生成多样的句式。实验证明,在QANet上,这种策略取得了良好的效果。因此作者在情感分类问题等数据集,如IMDb,Yelp-2, Yelp-5, Amazon-2 , Amazon-5上采用了这种策略,同时,他们发现,句式的多样性比有效性更重要。
    UDA的框架结构如下:

  • EDA
    EDA(easy data augmentation)使用了如下手段:

    • 同义词替换(Synonym Replacement, SR):从句子中随机选取n个不属于停用词集的单词,并随机选择其同义词替换它们;
    • 随机插入(Random Insertion, RI):随机的找出句中某个不属于停用词集的词,并求出其随机的同义词,将该同义词插入句子的一个随机位置。重复n次;
    • 随机交换(Random Swap, RS):随机的选择句中两个单词并交换它们的位置。重复n次;
    • 随机删除(Random Deletion, RD):以 p的概率,随机的移除句中的每个单词;

    针对中文语料的数据增强EDA实现


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!


NLP—6.数据不平衡处理相关推荐

  1. msra数据集_ACL2020 | 香侬科技提出使用Dice Loss缓解数据集数据不平衡问题

    论文标题:Dice Loss for Data-imbalanced NLP Tasks 论文作者:Xiaofei Sun, Xiaoya Li, Yuxian Meng, Junjun Liang, ...

  2. 数据中心细节_当细节很重要时数据不平衡

    数据中心细节 定义不平衡数据 (Definition Imbalanced Data) When we speak of imbalanced data, what we mean is that a ...

  3. nodejs 图片处理模块 rotate_如何针对数据不平衡做处理?

    背景 数据和特征决定了机器学习的上限,模型和算法只是不断逼近这个上限. 无论是做比赛还是做项目,都会遇到一个问题:类别不平衡.这与 数据分布不一致所带来的影响不太一样,前者会导致你的模型在训练过程中无 ...

  4. dice系数 交叉熵_ACL2020 | 香侬科技提出用Dice Loss缓解数据集数据不平衡问题

    论文标题: Dice Loss for Data-imbalanced NLP Tasks 论文作者: Xiaofei Sun*, Xiaoya Li*, Yuxian Meng, Junjun Li ...

  5. ACL 2020 | 香侬科技提出用Dice Loss缓解数据集数据不平衡问题

    论文标题: Dice Loss for Data-imbalanced NLP Tasks 论文作者: Xiaofei Sun*, Xiaoya Li*, Yuxian Meng, Junjun Li ...

  6. 人机交互系统(3.1)——NLP文本数据增强方法

    一.数据增强的背景和应用场景 随着AI技术的逐步发展,更好的神经网络模型对数据规模的要求也逐步提升.而在分类任务中,若不同类别数据量相差很大,模型则会出现过拟合现象,严重影响预测的正确性. 从广义上来 ...

  7. 文本分类在内容安全应用中的数据不平衡问题

    经过几十年的发展,文本分类在学术界已经是一个比较成熟的技术,目前自然语言处理(NLP)的研究热点已经不在文本分类上面.然而,作为内容安全检测的一个重要技术手段,文本分类在实际业务中还是有不少的挑战. ...

  8. 多分类 数据不平衡的处理 lightgbm

    前言 数据不平衡问题在机器学习分类问题中很常见,尤其是涉及到"异常检测"类型的分类.因为异常一般指的相对不常见的现象,因此发生的机率必然要小很多.因此正常类的样本量会远远高于异常类 ...

  9. 机器学习数据不平衡不均衡处理之SMOTE算法实现

    20201125 当多数类和少数类数量相差太大的时候,少数类不一定要补充到和多数类数量一致 最好的办法就是全部过采样到最大记录数的类别 调参 SMOTE:只是过采样 SMOTEENN:过采样的同时欠采 ...

  10. nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集

    nlp文本数据增强 Natural Language Processing (NLP) is one of the most important fields of study and researc ...

最新文章

  1. maven(一 基本操作 命令 标签)
  2. 写jsx_一种让小程序支持JSX语法的新思路
  3. 火狐浏览器 firebug调试不能载入javascript
  4. 使用GPS实时记录运动路线
  5. 成为优秀高级程序员的10个要点
  6. 搭建elasticsearch+kibana+logstash+filebeat
  7. 什么版本测试通过就能发布?
  8. 平安人寿福利BUFF重磅推介 | 北京研发中心职位速递
  9. gimp教程:gimp界面介绍
  10. 百度地图拖动标注后获取坐标
  11. python调用其他程序或脚本方法(转)
  12. 数学建模 TOPSIS法
  13. IE6/7下不同的inline-block
  14. 每天一点正则表达式积累(五)
  15. 三种迷宫算法(深度优先、随机Prim、递归分割)
  16. 【主流Nivida显卡深度学习/强化学习/AI算力汇总】
  17. 没有域名怎么用宝塔面板搭建网站?
  18. MyBatis学习(一)-- 实现简单查询
  19. VB作业之生成随机数
  20. 分享wifidog的增强版: wifidogx

热门文章

  1. 移植u-boot.2012.04.01
  2. 如何利用ThoughtWorks.QRCode 生成二维码
  3. SRM 207 Div II Level Two: RegularSeason,字符串操作(sstream),多关键字排序(操作符重载)...
  4. bzoj1042硬币购物
  5. checkbox选中与取消选择
  6. LINUX下查看CPU使用率的命令[Z]
  7. jdbc:initialize-database标签的研究
  8. Feisty中totem-xine播放rm和rmvb没有声音
  9. 解决navicat在未联网的情况下访问不了MySQL数据库的现象
  10. ElasicSearch(2) Linux运行