数据不平衡问题

目录

数据不平衡如何处理?

阐述“imbalanced learning的几种思想”

向上重采样:

向下重采样:

从数据合成的角度

(极差、方差、标准差、变异系数)

数据不平衡常用方法:

抽样调查中如何选定样本数量

三个概念

最小抽样量的计算公式

问题:是所有的抽样研究样本量都要超过1000才具有有效性吗?

迁移学习


归纳:

  1. 多收集数据,源头上避免
  2. 采用不敏感的算法
  3. 调整样本权重
  4. 采用不同的评价指标
  5. 重采样:SMOTE+ENN
  6. 加入高斯分布的噪声
  7. 数据生成:GAN
  8. 进阶:迁移学习
  9. 如果实在太少,则对大类进行建模分布,以区分小类别

训练集测试集分布不一致性探索攻略

https://mp.weixin.qq.com/s/2UxAPn1_46Q1U0HTWXm2dg

【机器学习基础】5种数据同分布的检测方法!

https://mp.weixin.qq.com/s/Vh-fOyVzeLOAMVw1U_HmHA

分类机器学习中,某一标签占比太大(标签稀疏),如何学习?

https://www.zhihu.com/question/372186043/answer/1501948720?utm_source=wechat_session&utm_medium=social&utm_oi=625300290379976704

最近刚好对类别不平衡的分类问题(也即长尾分布学习,long-tailed recognition)做了一波review,整理一下我自己的总结,可以和其他回答互补一下,为小伙伴们提供一些思路和参考。这里涵盖的大部分也都是近年深度学习框架下的工作,如有遗漏欢迎补充。目前主流的方法大致有以下几种(reference只列举出了比较有代表性的):

  1. 重采样(re-sampling):这是解决数据类别不平衡的非常简单而暴力的方法,更具体可以分为两种,对少样本的过采样[1],或是对多样本的欠采样[2]。当然,这类比较经典的方法一般效果都会欠佳,因为过采样容易overfit到minor classes,无法学到更鲁棒易泛化的特征,往往在非常不平衡的数据上泛化性能会更差;而欠采样则会直接造成major class严重的信息损失,甚至会导致欠拟合的现象发生。
  2. 数据合成(synthetic samples):若不想直接重复采样相同样本,一种解决方法是生成和少样本相似的“新”数据。一个最粗暴的方法是直接对少类样本加随机高斯噪声,做data smoothing[3]。此外,此类方法中比较经典的还有SMOTE[4],其思路简单来讲是对任意选取的一个少类的样本,用K近邻选取其相似的样本,通过对样本的线性插值得到新样本。说道这里不禁想到和mixup[5]很相似,都是在input space做数据插值;当然,对于deep model,也可以在representation上做mixup(manifold-mixup)。基于这个思路,最近也有imbalance的mixup版本出现[6]
  3. 重加权(re-weighting):顾名思义,重加权是对不同类别(甚至不同样本)分配不同权重,主要体现在重加权不同类别的loss来解决长尾分布问题。注意这里的权重可以是自适应的。此类方法的变种有很多,有最简单的按照类别数目的倒数来做加权[7],按照“有效”样本数加权[8],根据样本数优化分类间距的loss加权[9],等等。对于max margin的这类方法,还可以用bayesian对每个样本做uncertainty估计,来refine决策边界[10]。这类方法目前应该是使用的最广泛的,就不贴更多的reference了,可以看一下这个survey paper[3]
  4. 迁移学习(transfer learning):这类方法的基本思路是对多类样本和少类样本分别建模,将学到的多类样本的信息/表示/知识迁移给少类别使用。代表性文章有[11][12]
  5. 度量学习(metric learning):本质上是希望能够学到更好的embedding,对少类附近的boundary/margin更好的建模。有兴趣的同学可以看看[13][14]。这里多说一句,除了采用经典的contrastive/triplet loss的思路,最近火起来的contrastive learning,即做instance-level的discrimination,是否也可以整合到不均衡学习的框架中?
  6. 元学习/域自适应(meta learning/domain adaptation):这部分因为文章较少且更新一点,就合并到一起写,最终的目的还是分别对头部和尾部的数据进行不同处理,可以去自适应的学习如何重加权[15],或是formulate成域自适应问题[16]
  7. 解耦特征和分类器(decoupling representation & classifier):最近的研究发现将特征学习和分类器学习解耦,把不平衡学习分为两个阶段,在特征学习阶段正常采样,在分类器学习阶段平衡采样,可以带来更好的长尾学习结果[17][18]

作者:Yuzhe Yang
链接:https://www.zhihu.com/question/372186043/answer/1501948720
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


数据不平衡如何处理?

  1. 数据采集过程中,尽可能从源头上避免

  2. 数据集上,通过向上、向下重采样的方式,改变训练集样本:

    1. SMOTE:人工构造小类样本:

    2. 向下重采样:ENN,可编辑的最近邻

    3. 两种方法的组合方法

    4. 机器学习的引入,比如SVM,聚类

  3. 适当的数据不平衡时可以接受的,如果比较严重,则尽可能选择对数据不平衡不那么敏感的模型,比如DT比NN就更健壮一点;决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。

  4. 模型参数设置的角度来说,比如xgboost里面有scale_pos_weight=负样本数目/正样本的数目

  5. 模型本身的角度来说,深度学习里面有。。。

  6. 评估函数:评价模型的效果除了整体的准确率和召回率,还可以用f1 score,AUC等

  7. 数据增强data augmentation的方式(https://zhuanlan.zhihu.com/p/41679153

    1. 图像的旋转、平移、压缩、放大、对称等、裁剪、引入高斯分布等噪声

    2. GAN神经网络:条件GAN可以将图像从一个域转换为图像到另一个域上,纹理、氛围、外观的风格转移;唯一缺点是,输出看起来更具艺术性而非现实性

    3. 时序:引入高斯分布等噪声,还可以增强模型的学习能力

    4. 迁移学习(Transfer Learning):

  • 线下增强(offline augmentation):事先执行所有转换,实质上会增强你的数据集的大小。

  • 线上增强(online augmentation)或在飞行中增强(augmentation on the fly):这种方法更适用于较大的数据集(larger datasets),因为你无法承受爆炸性增加的规模。另外,你会在喂入模型之前进行小批量(mini-batch)的转换。一些机器学习框架支持在线增强,可以在gpu上加速。

阐述“imbalanced learning的几种思想”

向上重采样:

  1. 缺点:引入噪声、受异常值影响比较大

  2. SMOTE:基于距离度量选择小类别样本, [1.计算点p在S中的k个最近邻 2. 有放回地随机抽取R≤k个邻居 3. 对这R个点,每一个点与点p可以组成一条直线,然后在这条直线上随机取一个点,就产生了一个新的样本,一共可以这样做从而产生R个新的点。 4. 将这些新的点加入S中]

  3. 这样就构造了更多的新生数据。

  4. 该方法可以进一步跟机器学习结合,比如KNN近邻法筛选出被错误分类的样本、SVM帮助寻找支持向量、

  5. 每次生成新数据点时加入轻微的随机扰动(高斯分布的噪声),经验表明这种做法非常有效。

向下重采样:

  1. 缺点:丢失了部分信息

  2. 可编辑的最近邻方法:ENN——[将那些大类的样本,如果他的大部分k近邻样本都跟他自己本身的类别不一样,我们就将他删除]——边界上的噪声点可以被清洗

  3. 【clusterCentroids】——用K-means的聚类中心生成每一类的样本点,替代原始样本——对大类进行聚类成若干份——对于小类很小时,高效——大类数目悬殊,生成的新样本不是特别稀疏的,效果差

  4. Tomek:[Tomek's Links]——[如果有两个不同类别的样本,它们的最近邻都是对方A B,那么A,B就是Tomek link。将组成Tomek link的两个样本,删除掉其中属于大类的那个;或者两个都删除]

改进:两种采样方法的组合方法


从数据合成的角度

在很多机器学习任务中,训练集中可能会存在某个或某些类别下的样本数远大于另一些类别下的样本数目。即类别不平衡,为了使得学习达到更好的效果,因此需要解决该类别不平衡问题。
尝试产生人工数据样本 
  一种简单的人工样本数据产生的方法便是,对该类下的所有样本每个属性特征的取值空间中随机选取一个组成新的样本,即属性值随机采样。你可以使用 基于经验 对属性值进行随机采样而构造新的人工样本,或者使用类似 朴素贝叶斯方法假设各属性之间互相独立进行采样 ,这样便可得到更多的数据,但是无法保证属性之间的线性关系(如果本身是存在的)。
  有一个系统的构造人工数据样本的方法SMOTE(Synthetic Minority Over-sampling Technique)。SMOTE是一种过采样算法,它构造新的小类样本而不是产生小类中已有的样本的副本,即该算法构造的数据是新样本,原数据集中不存在的。该基于距离度量选择小类别下两个或者更多的相似样本,然后选择其中一个样本,并随机选择一定数量的邻居样本对选择的那个样本的一个属性增加噪声,每次处理一个属性。这样就构造了更多的新生数据。具体可以参见 原始论文  
  这里有SMOTE算法的多个不同语言的实现版本: 
  • Python:  UnbalancedDataset 模块提供了SMOTE算法的多种不同实现版本,以及多种重采样算法。
  • 增加新数据,可以使用 SMOTE或SMOTEBoost 产生人造数据。
  • More details than you need: imho, the most interesting of the corrupting distributions is the blankout distribution, where you just zero out a random subset of features. Why is it interesting? Because you are helping your classifier be sturdier/hardier by giving it variations of your data that have essentially missing features. So it has to learn to classify correctly even in adverse conditions. 一个相关的想法是,在神经网络中,随机选择部分隐藏层单元来继续训练(即,随机去掉一部分隐藏层单元,(zeroed-out))。具体见 http://web.stanford.edu/~sidaw/cgi-bin/home/lib/exe/fetch.php?media=papers:fastdropout.pdf
  • 基于scikit-learn 的  imbalanced-learn  网址详细的 解释说明
  • 决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。
over-sampling】过采样/向上采样——优点:适用于多个类以及二分类——不需要任何类间信息。 因此,每个目标类别都是独立的重新抽样—— 缺点:容易导致过拟合 ——解决:每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效
  1. 【Naive random over-sampling】/RandomOverSampler——简单随机过采样—— 有放回的抽样,不断的从少数类的抽取样本; 把小众类复制多份 —— 反复出现一些样本;
  2. Synthetic Minority Oversampling Technique ( SMOTE ) 】——人工小类过采样技术—— [ 1.计算点p在S中的k个最近邻 2. 有放回地随机抽取R≤k个邻居 3. 对这R个点,每一个点与点p可以组成一条直线,然后在这条直线上随机取一个点,就产生了一个新的样本,一共可以这样做从而产生R个新的点。 4. 将这些新的点加入S中] ——( not make any distinction between easy and hard samples to be classified using the nearest neighbors rule )/所有样本同等对待——( connect inliers and outliers )正常值和异常值同等对待- 次优解、引入噪声[ not have any knowledge regarding the underlying distribution. Therefore, some noisy samples can be generated, e.g. when the different classes cannot be well separated. ] ——三种 变体 focus on samples near of the border of the optimal decision function and will generate samples in the opposite direction of the nearest neighbors class )、关注不同类别的边界,与临近类别相反的方向复制样本,如下:
    1. regular- SMOTE——随机去临近点,连线线性插值,随机生成新样本——[ not impose any rule and will randomly pick-up all possible  x_i  available ]/随机选取点,
    2. Borderline-SMOTE1—— 从S集中求最近邻,根据临近样本的类别分布,比例大小判断“危险”样本,连线线性插值,随机生成新样本—— [ 1. 计算点p在训练集T上的m个最近邻。 (表示点p的最近邻中属于L的数量). 2. If m' 是一个噪声,不做任何操作. 3. If 0 m' ≤m/ 2 , 则说明p很安全,不做任何操作. 4. If m/ 2 m' ≤ m, 点p很危险,在这个点附近生成少数类点 ]
    3. Borderline-SMOTE2—— Borderline-SMOTE1很像,最后一步不一样—— 不仅从S集中求最近邻,而且在L集中求最近邻,并生成新的少数类点——这会使得少数类的点更加接近其真实值 ——[ 1. 在S和L中分别得到k个最近邻样本Sk和Lk。 2. 在Sk中选出α比例的样本点和p作随机的线性插值产生新的少数类样本 3. 在Lk中选出 1 −α比例的样本点和p作随机的线性插值产生新的少数类样本。 ]
    4. SVM-SMOTE ——[ SVM classifier to find support vectors and generate samples considering them ]/用SVM分类器寻找支持向量
  3. Adaptive Synthetic ( ADASYN ) sampling method 】——适应性人工采样方法——( focuses on generating samples next to the original samples which are wrongly classified using a k-Nearest Neighbors classifier )/将K邻近分类器错分的样本复制——(  focus solely on outliers  )可能只关注异常值-次优解
under -sampling 】欠采样/向下采用——从大众类中剔除一些样本,或者说只从大众类中选取部分样本—— 缺点: 最终的训练集丢失了数据,模型只学到了总体模式的一部分,丢失信息——解决:EasyEnsemble、BalanceCascade、NearMiss
  1. 【prototype generation】——生成新样本,替代原始样本
    1. 【clusterCentroids】——[ each class will be synthesized with the centroids of the K-means method instead of the original samples]/ 用K-means的聚类中心生成每一类的样本点,替代原始样本——对大类进行聚类成若干份——对于小类很小时,高效——大类数目悬殊,生成的新样本不是特别稀疏的,效果差
  2. 【prototype selection】——在原始样本中筛选样本子集
    1. 【controlled under-sampling techniques】——用户指定样本数
      1. [RandomUnderSampler]——随机选取大类的样本子集——
      2. [ NearMiss]——有三种 heuristic rules、[ based on nearest neighbors algorithm ]\基于临近算法——[ n_neighbors  to compute the average distance to the neighbors、and  n_neighbors_ver3  for the pre-selection of the samples of interest、accept classifier derived from  KNeighborsMixin  from scikit-learn. ——缺点:计算量大——[ 利用KNN试图挑选那些最具代表性的大众样本 ]
        1. 第一种:[ positive samples for which the average distance to the  N  closest samples of the negative class is the smallest ]/离最近的N个小类点的距离最小的大类——受噪声干扰大(noise)——边界上的点容易被选中
        2. 第二种:[ positive samples for which the average distance to the  N  farthest samples of the negative class is the smallest ]/离最远的N个小类点的距离最小的大类——受噪声干扰小,受边际异常值干扰大(marginal outliers)
        3. 第三种:[ 2-steps algorithm. First, for each negative sample, their  M  nearest-neighbors will be kept. Then, the positive samples selected are the one for which the average distance to the  N  nearest-neighbors is the largest. ]/分两步走,——因为第一步,受噪声影响更小
    2. cleaning under-sampling techniques】——样本空间清洗,自动选择——heuristic
      1. [ Tomek's Links]——[ 如果有两个不同类别的样本,它们的最近邻都是对方A B,那么A,B就是Tomek link。将组成Tomek link的两个样本,删除掉其中属于大类的那个;或者两个都删除]
      2. [ EditedNearestNeighbours]/ENN—— [将那些大类的样本,如果他的大部分k近邻样本都跟他自己本身的类别不一样,我们就将他删除]——边界上的噪声点可以被清洗
      3. [ReapeatedEditedNearestNeighbours]——重复上一种方法多次——可以删除更多的数据——边界上的噪声点可以被清洗
      4. [AllKNN]——[  the number of neighbors of the internal nearest neighbors algorithm is increased at each iteration]/每次迭代时,内部最临近算法的样本临近个数会增加——边界上的噪声点可以被清洗
      5. [CondensedNearesrNeighbours]——迭代地用一条最邻近规则决定一个样本是否被剔除——对噪声敏感,将引入噪声
      6. [OneSideSelection]——可剔除噪声
      7. [NeighbourhoodCleaningRule]——专注于清洗而非压缩
      8. [InstanceHardenessThreshold]——可以用SCIKIT-LEARN中的分类器判别小概率样本并剔除,还使用了交叉验证——但是不能得到确切的样本数目
Combination of over- and under- sampling】——SMOTE会引入噪声+样本空间清洗方法,如TOMEK'S LINKS、ENN——SMOTETomek     SMOTEENN——其中后者比前者更容易清洗噪声
Ensemble of samplers】——生成几个平衡数据子集
  1. [ EasyEnsemble]——向下采样随机生成一个集合,[ 多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果]
  2. [ BalanceCascade]——相比于EasyEnsemble,采样一个分类器确保被错分的样本被分至下一个子集——还可以设定最大子集数目
  3. [ BalancedBaggingClassifier]——在训练集成算法之前对子集进行重采样,即结合了EasyEnseble采样器的输出和集成分类方法
【性能度量/评价指标】——imblearn.metrics
  1. classification_report_imbalanced
  2. sensitivity_specificity_support
  3. sensitivity_score
  4. specificity_score
  5. geometric_mean_score
  6. make_index_balanced_accuracy
【模型选择】   SMOTE-CART classifier
  1. before being fed to the sampler.
  2. The learning phase and the subsequent prediction of machine learning algorithms can be affected by the problem of imbalanced data set. The balancing issue corresponds to the difference of the number of samples in the different classes. We illustrate the effect of training a linear SVM classifier with different level of class balancing.
  3. With a greater imbalanced ratio, the decision function favor the class with the larger number of samples, usually referred as the majority class.
  4. One way to fight this issue is to
  5.   The most naive strategy is to
  6. augmented data set
  7. As a result, the majority class does not take over the other classes during the training process. Consequently, all classes are represented by the decision function.
  8. Apart from
  9. The figure below illustrates the major difference of
  10.   rule is not respected
  11. under-represented class
  12. in the presence of marginal outliers.
数据 发散程度  

(极差、方差、标准差、变异系数)

数据不平衡常用方法:

  1. 数据层面:采样,包括上采样和下采样,https://github.com/scikit-learn-contrib/imbalanced-learn
  2. 数据生成:如SMOTE,
  3. 模型层面:自定义的loss函数
  4. 模型层面:调整样本权重,比如自定义class weight、自定义sample weight
  5. 模型层面:选择对于数据不平衡不那么敏感的算法,比如DT比NN、SVM就更不那么敏感,以及集成学习(比如easyEnsemble和isolation Forest)
  6. 架构层面:自监督和半监督学习、主动学习、迁移学习

分类机器学习中,某一标签占比太大(标签稀疏),如何学习? - Yuzhe Yang的回答 - 知乎 https://www.zhihu.com/question/372186043/answer/1501948720

欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响? - 微调的回答 - 知乎 https://www.zhihu.com/question/269698662/answer/352279936


抽样调查中如何选定样本数量

抽样调查就是平衡有效性和经济型最好的工具。

三个概念

正态分布(Normal Distribution),抽样误差(Sampling Error),置信水平(Confidence Level)。

  • 对于我们要估计的整体,在没有特殊的要求下,我们会将它假设为一个服从正态分布的整体。
  • 样本估计量和整体参数之间的差异,这就是抽样误差。
  • 假设进行100次同样的抽样调查时,则有信心得到95个相同的结果,那么此时就称作当前置信水平是95%。下图表示的置信水平为95%,可以看到除了1个红色点外,其他所有的抽样数据加上上下两端的置信区间后,都可以将真实均值的数据包含进去,19/20=95%,

参考链接:https://www.chedong.com/blog/archives/001462.html

最小抽样量的计算公式

综上,样本规模的决定其实取决于3个要素:置信水平、抽样误差和研究资源。

问题:是所有的抽样研究样本量都要超过1000才具有有效性吗?

不是的。从统计学上,通常情况下只要样本量(N)大于30,就满足中央极限定理的基本条件,使用这样的样本即估计出来的统计量就服从正态分布。所以从30-1000的不同样本规模一样有它的存在意义。

迁移学习

同一模型在不同行业场景应用不同,如何提高模型可迁移性?

这个问题涉及机器学习中的一个重要的学习模式:迁移学习(transfer learning),已有某一个场合的大量数据或已经训练好的模型,作用到另一个数据偏少的相关场合。如何提高迁移效果,有几方面的问题:

1.适用场景:通常迁移学习适合于问题领域domain比较接近的两个场景,比如从一个视觉任务到另一个视觉任务。

2.迁移方式:常见的迁移方法是利用目标场景的数据对源场景模型进行refine。

3.zero shot learning:除了domain相似的迁移学习,近年来也有学者提出跨domain的迁移,主要思路是做数据embedding,通过深度学习将特征数据映射到高维特征向量空间,不同domain的模型在高维空间具有类似的结构,从而进行模型的迁移。

  • 19
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值