【2】样本不均衡问题及其解决办法

5 损失函数

在机器学习中,可以通过修改模型中的“class_weight”参数,从而调节不均衡样本的惩罚权重。

5.1 LogisticRegression(逻辑回归模型)

代码:

lr_l2 = LogisticRegression(penalty="l1",      #正则化,防止过拟合,包括l1和l2
						   C=0.5,             #正则化强度,C值越大,惩罚越重,正则化的效力越强
						   solver="liblinear",     #优化算法选择参数 
						   multi_class="auto",     #分类个数
						   class_weight='balanced' #类权重参数,控制类的惩罚权重
						   )

效果:
在这里插入图片描述

提升了一点,在测试集上的改进会更加显著。

5.2 SVC(支持向量回归模型)

代码:

svc2 = SVC(C=0.1,                   #边界点的惩罚系数,值越大,预测精度越高,但越容易过拟合
		   kernel='rbf',            #核函数类型
		   class_weight='balanced', #类权重参数
		   random_state=2)

效果:
在这里插入图片描述

精度同样有所提高,但是容易过拟合,只能调低参数C。

5.3 focal loss

focal loss由何凯明提出,用于解决数据不平衡对深度学习模型造成的模型性能问题

5.3.1 交叉熵函数

L o s s = L ( y , p ^ ) = − y l o g ( p ^ ) − ( 1 − y ) l o g ( 1 − p ^ ) Loss=L(y,\hat{p} )=-ylog(\hat{p})-(1-y)log(1-\hat{p}) Loss=L(y,p^)=ylog(p^)(1y)log(1p^)
其中 p ^ \hat p p^为预测概率
在二分类下, L L L如下形式:
L c e ( y , p ^ ) = { − l o g ( p ^ ) y = 1 − l o g ( 1 − p ^ ) y = 0 L_{ce}(y,\hat p)=\left\{\begin{matrix} -log(\hat p) & y=1\\ -log(1-\hat p) & y=0 \end{matrix}\right. Lce(y,p^)={log(p^)log(1p^)y=1y=0
在交叉熵损失函数(CE)的基础上增加了类别的不同权重以及困难(高损失)样本的权重。

5.3.2 样本不均衡问题

L = 1 N ∑ N i = 1 l ( y i , P ^ i ) L=\frac{1}{N}\sum_{N}^{i=1}l(y_{i},\hat P_{i}) L=N1Ni=1l(yi,P^i)
在二分类中,L表示如下:
L = 1 N ( ∑ y i = 1 m − l o g ( p ^ ) + ∑ y i = 0 n − l o g ( 1 − p ^ ) ) L=\frac{1}{N}(\sum_{y_{i}=1}^{m}-log(\hat p)+\sum_{y_{i}=0}^{n}-log(1-\hat p)) L=N1(yi=1mlog(p^)+yi=0nlog(1p^))
当样本分布失衡时,在损失函数L的分布也会发生倾斜,多数类样本就会在损失函数占据主导地位。由于损失函数的倾斜,模型训练过程中会倾向于样本多的类别,造成模型对少样本类别的性能较差。

5.3.3 平衡交叉熵问题

从样本分布角度对损失函数添加权重因子。
原理:基于样本非平衡造成的损失函数倾斜,一个直观的做法就是在损失函数中添加权重因子,提高少数类别在损失函数中的权重,平衡损失函数的分布。

在二分类下, L L L变为如下形式:
L = 1 N ( ∑ y i = 1 m − α l o g ( p ^ ) + ∑ y i = 0 n − ( 1 − α ) l o g ( 1 − p ^ ) ) L=\frac{1}{N}(\sum_{y_{i}=1}^{m}-\alpha log(\hat p)+\sum_{y_{i}=0}^{n}-(1-\alpha )log(1-\hat p)) L=N1(yi=1mαlog(p^)+yi=0n(1α)log(1p^))
其中 α 1 − α = n m \frac{\alpha}{1-\alpha}=\frac{n}{m} 1αα=mn ,即权重的大小根据正负样本的分布进行设置。

5.3.4 focal loss

从样本分类难易程度解决问题
原理:从loss的另一角度的解决方法,就是针对样本难易程度进行权重的分配,对难分类的样本赋予更大的权重,对于易分类的样本赋予较小的权重。
具体形式如下:
L f l = { − ( 1 − p ^ ) γ l o g ( p ^ ) y = 1 − p ^ γ l o g ( 1 − p ^ ) y = 0 L_{fl}=\left\{\begin{matrix} -(1-\hat p)^{\gamma}log(\hat p) & y=1\\ -\hat p^{\gamma}log(1-\hat p) & y=0 \end{matrix}\right. Lfl={(1p^)γlog(p^)p^γlog(1p^)y=1y=0
γ \gamma γ的意义为可调节因子,其中 γ \gamma γ均大于0,定义 p t p_{t} pt如下:
p t = { p ^ y = 1 1 − p ^ y = 0 p_{t}=\left\{\begin{matrix} \hat p & y=1\\ 1-\hat p & y=0 \end{matrix}\right. pt={p^1p^y=1y=0
因此focalloos表达式变形如下:
L f l = − ( 1 − p t ) γ l o g ( p t ) L_{fl}=-(1-p_{t})^{\gamma}log(p_{t}) Lfl=(1pt)γlog(pt)
交叉熵表达式变形如下:
L c e = − l o g ( p t ) L_{ce}=-log(p_{t}) Lce=log(pt)
相比较两个表达式,可以发现:fl表达式比交叉熵表达式多了一个可调节因子 ( 1 − p t ) γ (1-p_{t})^{\gamma} (1pt)γ

  • 对于分类正确的样本,该因子趋于0。
  • 对于分类错误的样本,该因子趋于1。
    因此,fl对于分类错误的样本,损失项相较于交叉熵没有变化,而对于分类正确的样本,损失相对于交叉熵缩小了,整体而言,fl相对于交叉熵整体缩小了,增加了分类不正确样本在损失函数中的权重。
    p t p_{t} pt衡量了分类的难易程度, p t p_{t} pt越大,分类置信度越高,即越容易分类。fl相当于增加了难分样本在损失函数中的权重,使得损失函数倾向于难分的样本。
    但并不是难分样本永远都是难分,易分样本也可能会逐渐变成难分样本,从而导致模型收敛较慢,因此应当适当降低学习率,以防止 p t p_{t} pt的巨大改变。
    代码:

5.4 OHEM

目标检测领域中所提出的算法,用来对困难负样本进行挖掘,基准算法是Fast R-cnn。
基本原理与focal loss相似,都是针对难分的样本。
选择一些hard examples(多样性和高损失的样本)作为训练的样本,针对性地改善模型学习效果。
![[Pasted image 20230308201450.png]]
第一块ROI层会得到所有ROI的loss,根据hard ROI sampler结构根据损失排序选出hard example,并将这些hard example作为第二块ROI层的输入。

6 选择合适的模型

6.1 选择对样本不平衡不敏感的模型

树模型要比逻辑回归模型要在不平衡数据集上表现更优秀

6.2 采样+集成学习

原理:采用集成学习机制来处理随机欠采样的信息丢失问题

6.2.1 EasyEnsembleClassifier算法

基于无监督的方式进行欠采样。
为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能。基于均衡样本集的Adaboost分类器的集成算法,就是对多数类样本进行n次欠采样,得到n个模型。

6.2.2 balance cascade算法

基于有监督结合boosting的方式。
基于Adaboost,将Adaboost作为基分类器,其核心思路是在每一轮训练时都使用多数类与少数类数量上相等的训练集,然后使用该分类器对全体多数类进行预测,通过控制分类阈值(即概率超过多少判定为少数类)来控制FP(False Positive)率,将所有判断正确的类(数量为负样本总数×(1-FP))删除,然后进入下一轮迭代继续降低多数类数量。
在这里插入图片描述

7 异常检测

将分类问题转化为异常检测问题,通过数据挖掘方法发现与数据集分布不一致的异常数据。
图片
网址:

https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=2247552622&idx=5&sn=8911513d9c1a1306da590bfd659b70f8&chksm=ebb736badcc0bfac43536a905ef999f29e5c618bb3bc41395a57b13b4306f8315055ccd08dc1&scene=27

8 评价指标

8.1 Aucurracy、precision、recall、F1

A u c u r r a c y = T P + T N T P + F P + T N + F N Aucurracy=\frac{TP+TN}{TP+FP+TN+FN} Aucurracy=TP+FP+TN+FNTP+TN
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
1 F 1 = 1 2 ( 1 P r e c i s i o n + 1 R e c a l l ) \frac{1}{F1}=\frac{1}{2}({\frac{1}{Precision}+\frac{1}{Recall}}) F11=21(Precision1+Recall1)

8.2 ROC曲线和AUC

ROC曲线下面积就是AUC
ROC曲线的横轴是TPR(recall),纵轴是FPR
在这里插入图片描述

8.3 R-P曲线与AUPRC(更优)

R-P曲线的横轴是Recall,纵轴是Precision
正样本个数严重小于负样本个数,收据严重倾斜时,P-R曲线相比较于ROC曲线更加适合。

### 关于目标检测中数据不均衡问题的研究概况 #### 类型与影响 在目标检测领域,数据不平衡问题是长期存在的挑战之一。这种不平衡不仅存在于整个数据集中(data-set level),也体现在单个小批量训练过程中(mini-batch level)。此类现象可能导致模型对于少数类别的识别能力下降,进而影响整体性能[^3]。 #### 已有研究概述 已有大量文献致力于探讨如何缓解这一难题。一篇名为《Imbalance Problems in Object Detection: A Review》的文章全面总结了不同类型的不平衡状况及其应对策略,并指出了当前尚未完全攻克的一些开放性议题[^1]。另一篇综述则具体讨论了类别间数量差异带来的困扰以及相应的解决办法,强调通过调整采样比例、引入加权机制等方式可以有效改善模型表现[^2]。 #### 技术手段 针对上述提到的数据分布失衡情况,研究人员提出了多种技术措施: - **重采样**:通过对过表达样本减少频率或欠表达样本增加出现次数来进行平衡化处理; - **类别权重调整**:赋予稀少类别更高的损失函数系数,使得网络更加关注这些重要但罕见的对象; - **生成对抗网络(GAN)** 或其他形式的人工合成实例创造方法被用来扩充那些难以获取足够真实案例的小众种类; - **优化现有框架结构设计**:比如采用Focal Loss替代传统的交叉熵作为评价标准,从而减轻正负样本数目差距过大造成的负面影响; 以上几种途径既可以单独实施也可以组合运用,视乎应用场景的具体需求而定。 #### 发展趋势 随着时间推移和技术进步,《Object Detection in 20 Years: A Survey》一文中指出,在过去二十年里,随着新算法不断涌现和发展成熟,该领域的理论基础得到了极大丰富和完善。未来的工作可能会继续围绕着更高效地利用有限资源构建更具鲁棒性的视觉感知系统展开探索[^4]。 ```python # 示例代码展示了一个简单的类别权重计算逻辑 def calculate_class_weights(class_counts, mu=0.15): total = sum(class_counts.values()) class_weight = {cls_id: max(mu / (cnt/total), 1) for cls_id, cnt in class_counts.items()} return class_weight ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值