除了常规的分类,回归任务,图像语义分割,深度估计等像素级别任务也不乏不平衡样本的出现
数据层面处理方法多借助数据采样法(sampling)使整体训练集样本趋于平衡
即各类样本数基本一致
重采样包括上采样和下采样
对于样本较少的类别,使用上采样(赋值/数据扩充),增加样本数
对于样本较多的类别,使用下采样,使不同类别数据均等
下采样时不是随机丢弃部分样本,而是在批训练时,每批随机挑选样本进入训练集
仅使用数据上采样有可能会引起模型过拟合问题。
保险有效的数据重采样是将上采样和下采样结合使用。
类别平衡采样:
对于海量类别任务极其繁琐
类别重组(label shuffling)
优点:只需要原始图像列表,所有操作在内存中线性完成。
与数据下采样有异曲同工之意
增大小样本错分的“惩罚代价”
假设某训练集共 N 个样本,形如: {xn,yn}Nn=1 { x n , y n } n = 1 N ,其中样本标记 y y 隶属于K类
代价敏感矩阵方法:利用 K×K K × K 的矩阵 C C 对不同样本类别施加错误惩罚(权重)
施加代价后的训练目标:
训练得到某分类器 g 使得期望代价之和 ∑nC(yn,g(xn)) ∑ n C ( y n , g ( x n ) ) 最小。
对某样本 (xn,yn) ( x n , y n ) ,有对应的一个 K 维代价敏感向量 cn∈[0,∞)K c n ∈ [ 0 , ∞ ) K ,其中 cn c n 的第 k 维表示该样本被错分为第k 类的惩罚
在模型训练阶段是将样本级别的代价敏感向量与样本以 (xn,yn,cn) ( x n , y n , c n ) 三元组形式一同作为输入数据送入学习算法
代价敏感矩阵实质上只是代价敏感向量的一种特殊形式
代价敏感方法处理不平衡样本问题的前提是需要事先指定代价敏感矩阵或向量,关键是错分惩罚或错分权重的设定。
根据不同类别的样本数量比例,样本数多的类别的错分权重低一些,小样本的类别错分权重大一些。
e.g. 类别 a:b:c=3:2:1 a : b : c = 3 : 2 : 1
代价敏感矩阵可以指定为:
混淆矩阵(Confusion Matrix)
混淆矩阵的每一列代表一个类的实例预测,每一行代表真实类别
e.g.
– | 类别a | 类别b | 类别c |
---|---|---|---|
类别a | 4 | 1 | 3 |
类别b | 2 | 3 | 4 |
类别c | 3 | 2 | 21 |
根据各类样本错分样本数设置代价敏感矩阵取值
一种方式是直接以错分样本数为矩阵取值
e.g.
更优方案:考虑各类的错分比例,调整权重
a类错分比例 50%
b类错分比例 67%
c类错分比例 19%
总错分比例 136%
a类错分占比:36.76%
b类错分占比:49.26%
c类错分占比:13.97%
以此为权重乘原代价矩阵,取整,得到新的代价矩阵:
参考文献:解析卷积神经网络—深度学习实践手册