样本不平衡问题总结

一、样本不平衡介绍

1. 样本不平衡现象:
训练数据中各种类别样本数量差别过大,导致训练的模型对各个类别预测或分类的精度偏差比较大,比如电池故障预测,故障的数据量远远少于正常数据量,但是这些故障数据反而更重要。
2. 样本不平衡影响:
训练样本不平衡,那么模型更容易偏向样本量多的类别,因为模型把样本量的大的类别预测对,整体精度也会高,就不会在意少量样本类别,但这是不对的。即模型会学习到按照样本类别比例的先验信息,而解决样本不平衡能解决学习到这种先验信息,能从本质正确的判断预测不同类别。
举个栗子: 比如模型为工科院校预测应该建多少男女厕所,男女比例为8:2,属于样本不均衡。那么训练的模型会偏向于男生,那么结果就是建立男厕的个数远远大于女生厕所,但这与实际情况不符,因为往往女生上厕所的时间要长于男生,故实际上不需要那么多男生厕所,应该是男女生厕所数量相当,才能符合正常需求。

3.判断解决不平衡的必要性:

  • 任务是否复杂: 任务越复杂,越需要解决样本不平衡问题。
  • 训练样本与真实样本的分布是否一致: 如果分布一致且稳定,那影响不大。如果分布会变化,那就需要解决。

二、样本不平衡解决方法

总结: 使得不同类别的样本对于模型中的Loss(梯度)或者贡献是均衡的。主要从数据样本、模型算法、损失函数、评估指标讨论。

1. 数据样本

1.1 欠采样:

减少多数类样本的数量。包括随机欠采样、NearMiss、ENN等。

(1)随机欠采样: 从多数类别样本中随机选取一些剔除掉。

(2)原型选择和原型生成: 从多数样本中选取或生成具有代表性的样本进行训练。

  • NearMiss-1: 在多数样本中选择出与少数样本最近的K个样本的平均距离最小的样本。计算每个多样本与每个负样本的距离;得出每个多数样本与负样本距离最近K个负样本,计算K个平均距离,即每个多数样本都有这个平均距离,按照这个平均距离排序,选择出平均距离最近的样本。
  • NearMiss-2: 在多数样本中选择出与少数样本最远的K个样本的平均距离最小的样本。计算每个多样本与每个负样本的距离;得出每个多数样本与负样本距离最远K个负样本,计算K个平均距离,即每个多数样本都有这个平均距离,按照这个平均距离排序,选择出平均距离最近的样本。
  • NearMiss-3: 对于每个少数类别样本,选择离它近的K个多数类别样本。
  • 基于K-Means聚类欠采样: sklearn中的用法:直接使用聚类类别的聚类质心作为样本,不一定是原始样本。另一种方法是将多数类别数据进行聚类,假如K个类别,然后选取每个类别中距离聚类质心最近的n个样本,这样就可以得到n*K个样本。

(3)数据清洗方法:

  • Tomek Link: 两个不同类别的样本互为近邻,则其为Tomek Link。然后可以选择剔除Tomek Link中的全部样本或者多数类别的那个样本。
  • Edited Nearest Neighbours (ENN): 对于多数类的一个样本,其最近邻的样本大部分或者全部样本不属于其类别则剔除。
1.2 过采样:

(1)随机过采样:
从样本类别数量少的样本中随机选取样本,再添加到训练样本中。

(2)SMOTE: synthetic minority oversampling technique,SMOTE。思想:在少数样本之间进行差值来产生额外的样本。对少数类别样本,选取K近邻个样本,在K中随机选取一个,使用差值方法生成新样本。如 x n e w = x i + ( x i ^ − x ) ∗ σ x_{new} = x_i+(\hat {x_i}-x)* \sigma xnew=xi+(xi^x)σ。使用SMOTE希望生成的样本能处于两个类别的边界附近,不至于生成噪音样本。所以出现了Border-line SMOTE方法,其将少数类别样本分为三类:

  • noise:其所有的k近邻个样本都属于多数类;
  • danger:超过一半的k近邻样本属于多数类;
  • safe:超过一半k近邻样本属于少数类。
    Border-line SMOTE方法只会从danger状态的样本中随机选择,然后这个样本使用SMOTE算法生成新样本。

(2)ADASYN: adaptive synthetic sampling,自适应合成抽样。会为每个少数类样本生成不同数量的新样本,并根据k近邻中多数样本占的比重,赋予了每个少数样本的权重,k近邻中多数样本权重越高,当前样本权重越高,进而在该样本周围生成的样本数量越多。

(3)属性值随机采样: 对该类下的所有样本的每个属性特征的取值空间中随机选取一个值以组成新的样本,即属性值随机采样。但是无法保证特征之间的关系。

1.3 欠采样和过采样结合:

SMOTE+ENN、SMOTE+TomeK

代码实现: 不平衡学习python库:sudo pip install imbalanced-learn
sklearn 相关文档:https://imbalanced-learn.org/stable/user_guide.html

1.4 深度学习中的数据增强
  • 单样本:
    主要包括 翻转,旋转,扭曲,图像仿射变换,缩放,压缩,随机crop,随机padding,HSV变换,噪声,模糊,图像(feature map)区域随机擦除,风格转换(GAN),VAE(变分自编码)等。
  • 多样本:
    主要包括 mosaic,MixUp,cutout,copy paste等。

2. 损失函数

2.1 class weight:

根据不同类别的样本数量占总样本数量的权重分类loss 权重,少数类有更高权重。
可以自定义设定字典,如class_weight = {0:0.1, 1:0.9}, 也可通过balanced设置,计算方法为: w e i g h t = n _ s a m p l e s / ( n _ c l a s s e s ∗ n p . b i n c o u n t ( y ) weight = n\_samples/(n\_classes*np.bincount(y) weight=n_samples/(n_classesnp.bincount(y), n_samples为总样本数量,n_classes为总类别数目,np.bincount(y)为第y类样本数量。
类似的还有sample_weight,loss weight等。

2.2 OHEM和Focal Loss:

类别的不平衡可以归结为难易样本的不平衡,难易样本不平衡可以归结为梯度不平衡,即对梯度的贡献不平衡。
(1)OHEM: Online Hard Example Mining,选择难样本和高损失的样本进行训练。
(2)Focal Loss: 在CE loss上增加了类别不同权重以及困样本权重(高损失)

3. 模型层面

选择对样本不均衡的模型,如决策树,更优秀的:基于采样+集成树模型。

3.1 采样+集成学习:

集成方法(Ensemble Methods): 采用集成学习机制进行处理。包括EasyEnsemble和BalanceCasde。假设类别0数目为1k,类别1数目为1w。

  • (1)EasyEnsemble: 将多数样本(类别1)分为 1w/1k=10个子集,每个子集和少数样本数量一样,然后按照10个子集分别与少数样本类别训练,即训练10个模型,然后将这10个模型进行集成。示例代码可见:www.kaggle.com/orange90/ensemble-test-credit-score-model-example
  • (2)BalanceCascade: 核心采用Boosting方法。从多数类别样本1w中随机抽样1k与少数样本类别1k训练一个基学习器H1,然后H1对1w进行预测,剔除预测正确的多数类别样本,继续随机抽取1k与少数样本类别1k进行训练学习器H2,如此循环得到n个基学习器,最后集成起来。
3.2 异常检测:

极端不平衡可将分类问题看作异常检测问题,无监督异常检测按其算法思想大致可分为几类:基于聚类的方法、基于统计的方法、基于深度的方法(孤立森林)、基于分类模型(one-class SVM)以及基于神经网络的方法(自编码器AE)等等。

4. 决策及评估指标

对于类别不均衡下模型的预测,我们可以做分类阈值移动,以调整模型对于不同类别偏好的情况(如模型偏好预测负样本,偏向0,对应的我们的分类阈值也往下调整),达到决策时类别平衡的目的。这里,通常可以通过P-R曲线,选择到较优表现的阈值。

对于类别不均衡下的模型评估,可以采用AUC、AUPRC(更优)评估模型表现。AUC的含义是ROC曲线的面积,其数值的物理意义是:随机给定一正一负两个样本,将正样本预测分值大于负样本的概率大小。AUC对样本的正负样本比例情况是不敏感,即使正例与负例的比例发生了很大变化,ROC曲线面积也不会产生大的变化。

Ref:

  • http://mp.weixin.qq.com/s__biz=MzA4ODUxNjUzMQ==&mid=2247499212&idx=1&sn=88bb98c85fcbe63af1f23e23a327f89c&chksm=902a4f10a75dc60611a5ae12a7a4d4f3cf2f30e04cbd9354ea626df85aed6ebd2641d03f8643&mpshare=1&scene=24&srcid=0506wC5kxnqk4RWRrJM1zziv&sharer_sharetime=1651841326205&sharer_shareid=fa22959dc0330bbc7ea28951dd5fc768#rd

  • http://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247599273&idx=1&sn=9a62b6fc445d15f262bffed746ecb0d4&chksm=ec1da950db6a204621e9b859d9ae27fc732b3cc0a3c067b15666ffcc7dc5658da3578576fd74&mpshare=1&scene=24&srcid=0404GZ9J8Opn8L2sbnq37Ejp&sharer_sharetime=1649133056515&sharer_shareid=fa22959dc0330bbc7ea28951dd5fc768#rd

  • 4
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值