![235f1633a457e2f1a6f4ae1d2f8f66c8.png](https://i-blog.csdnimg.cn/blog_migrate/d996a186c9b45452b6acfbf10d81bc37.jpeg)
样本类别不均衡是机器学习实践中经常会遇到的问题,很多时候我们只有少量的正样本和非常多的负样本,当然这种情况在多分类问题中也会经常遇到。
这种现象会对机器学习模型的性能带来很大影响。因为负样本很多,负样本在总的损失函数中的占比很大,使得模型会专注与学习负样本相关的信息来减小损失,对于正样本的关注度不足,导致最终模型对正样本以及与正样本相似的负样本的分类效果较差。
下面介绍一些解决类别不均衡问题的常用方法,个人理解有局限,大家看到有误的地方还请及时指出:
1、样本层面
问题既然是样本在类别上的分布不均衡,首先能想到的就是改变样本数量,使类别分布均衡。
1)上采样
通过采样对样本进行扩充,简单的重复样本不是和好方法,最好使用数据增强的方式生成相对自然又有新信息的样本。
2)下采样
通过随机采样、分层采样、加权采样等方式对样本进行筛选,保留比较有代表性的样本,去掉大量重复的相似的样本。
3)样本权重
样本数量多类别,样本权重小一些;样本数量少的类别,样本权重大一些。比如,
2、模型层面
1)Focal Loss
《Focal Loss for Dense Object Detection》ICCV2017 RBG,Kaiming
消除正负样本比例不平衡,并且增强对难样本的处理能力(一些很难区分的样本,其对立就是很容易识别准确的简单样本,简单样本带来的loss很小,在训练后期大量简单样本会浪费大量的训练时间)。
Focal loss是在交叉熵损失函数基础上进行的修改,降低了大量简单负样本在训练中所占的权重。首先回顾二分类交叉上损失:
![79cc3439a70c6728aa1ddcc8c60d7f38.png](https://i-blog.csdnimg.cn/blog_migrate/2cd158f466f7d5831a8dc80b48d27fa3.png)
其中 y 是真实样本的标签(1正0负), y’ 是经过 sigmoid 激活函数的预测输出(数值在0-1之间)。可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。此时的损失函数在大量简单样本的迭代过程中比较缓慢且可能无法优化至最优。
在此背景下,Focal Loss函数提出来了,
![1872cc89227893efe6b81361fa344545.png](https://i-blog.csdnimg.cn/blog_migrate/81702ea905d3c8683197adc98a117a90.png)
它在原有的基础之上加了一个γ,其中γ>0使得减少易分类样本的损失,使得模型更关注于困难的、错分的样本。
下图是γ的不同取值对损失函数曲线的影响:
![53eb1b1868c354007464f793524a813e.png](https://i-blog.csdnimg.cn/blog_migrate/15314211a7880cfe4d3ed78e0afba87d.jpeg)
例如:γ为2时,对于正类样本而言&