样本不均衡问题的解决方案
数据角度
Under Sampling
去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。
Random Under Sampling
随机去除一部分多数类的数据
不足:导致多数类信息缺失(比如删了最具代表性的一些样本)
EasyEnsemble
并行学习n个模型,然后集成
算法步骤:
1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合。
2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。
3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。
BalanceCascade
串行学习n个模型,每次用模型在多数类样本上预测并删去固定比例预测正确的,多数类数量会不断减少
区别在于多了 7,8 step:
根据 \(H_i\) 的阈值 \(\theta_i\) 对所有的多数类样本进行预测,控制预测错误的比例为\(f\),第8步中去掉的预测正确的样本(简单样本)
\(f\)的取值可以保证T步后多数类剩余数量和少数类相同,停止迭代
Over Sampling
增加一些少数类样本使得正、反例数目接近,然后再进行学习。
Random Under Sampling
随机挑一些样本重复出现
并没有引入新的信息,模型会对少数类过拟合
Synthetic Minority Oversampling (SMOTE)
少数类的样本进行插值
1.对于每一个少数类样本,找到其K个最近少数类样本。
2.从这K个最近邻居中随机选择一个样本。
3.在两点连线上随机生成一个新样本。
不足: 对于噪声和离群点敏感,无法处理样本重叠问题
Borderline SMOTE
仅拓展分类面边缘的少数类样本
Borderline SMOTE采样过程是将少数类样本分为3类,分别为Safe、Danger和Noise
adaptive synthetic sampling (ADASYN)
根据样本密度分布来调整合成样本的数量。类似Borderline SMOTE
Borderline SMOTE
Loss角度
二分类交叉熵:
等价于
测试集上的loss为
其中m为正样本个数,n为负样本个数,N为样本总数
balanced cross entropy
放大出现次数少的label的loss
缩小出现次数多的label的loss
其中\(\frac{\alpha}{1 - \alpha} = \frac{n}{m}\)
Online Hard Example Mining
只用较难的样本来更新网络
以二分类为例,我们认为大于0.5的就是正样本了,小于0.5的就是负样本。这样就意味着,我们可以“有选择”地更新模型,比如,设定一个阈值为0.6,那么模型对某个正样本的输出大于0.6,我就不根据这个样本来更新模型了,模型对某个负样本的输出小于0.4,我也不根据这个样本来更新模型了,只有在0.4~0.6之间的,才让模型更新,这时候模型会更“集中精力”去关心那些“模凌两可”的样本,从而使得分类效果更好,这跟传统的SVM思想是一致的。
还能防止过拟合:防止模型去把简单样本做的更好,来降低loss
参考博客
不足:这样算是硬截断的loss,我们只告诉模型正样本的预测值大于0.6就不更新了,却没有告诉它要“保持”大于0.6!
解决方案:
- 采样部分loss大于0.6的简单样本
- Focal loss(软化,可导)
Focal loss
公式如下:
focal loss用较可导的方式量化了每个样本的难易程度,使loss聚焦于难分样本。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?