不平衡数据集
不平衡数据集指的是数据集各个类别的样本量极不均衡. 例如二分类问题中, 正样本的数量大于负样本的数量, 例如不平衡程度(imbalance ratio, IR)达到10:1, 100:1的程度. 对于不平衡程度特别大(1000:1 甚至10000:1的程度)的数据集, 称为extremely imbalance. 相当一部分不平衡学习在这种情况下都失效了.
不平衡数据的学习即需要在分布不均匀的数据集中学习到有用的信息.
关注角度
在不平衡分类问题中, 对多数类/少数类样本有两种关注角度.
一般我们更关注模型正确分类少数类样本的能力
更关注多数类样本, 则该问题可以退化为异常检测(anomaly detection)问题, 少数类样本这里就是noise
但即使我们关心模型正确分类少数类样本的能力, 也可以参考使用异常检测的方法来实现.
这是因为对于分类问题, 我们假设每个分类的数据都有自己的分布, 当某类数据少到难以观察结构的时候, 我们可以考虑抛弃少数类样本, 转而以异常检测的方法学习更容易学习也更为明显的多数类的模式, 而后将不符合多数类模式的样本判断为异常/少数类, 某些时候会有更好的效果.
不平衡数据集产生问题的原因
一个数据集中不同类别的数据量不平衡时, 学习器在分类少数类样本时会遇到一些困难. 直觉上来看, 数据集越不平衡, 分类器的效果会越差. 但IR并不是影响分类难度的唯一元素. 对于某些实际任务, 虽然也有着比较大的IR, 但使用普通的分类器仍然能够取得较好的结果. 因此需要更深层次的探究不平衡数据集训练困难的原因. 一般有以下几点:
不平衡程度(IR)较高
数据集中少数类样本的稀疏性(sparsity)
少数类样本的稀疏性指的是少数类样本没有出现在一个连续的分布中, 而是分布在离散的多个cluster中. 此时该数据集会具有更高的分类难度.
这里的稀疏指的是样本在空间上的不连续, 而不是特征空间中的稀疏
类别分布重合(overlapping)的程度
overlapping即正负样本相对密集地出现在样本空间的同一区域. 相比于IR, overlapping其实对分类难度具有更显著的影响
在overlapping程度较高的时, KNN分类器反而有最好的表现. 并且随着overlapping程度增高, 更加local(K值更小)的KNN效果相比K值较大的KNN会变得更好
这是由于少数类的空间中插入了更多的多数类样本, 少数类数据的模式可能变得会更倾向于稀疏分布, 因此更加local的分类器如KNN虽然简单, 但在该情况下很有效
异常样本(noisy sample/噪声/离群点)
不平衡学习中基本所有分类器都是噪声敏感的, 并且相比于多数类的噪声, 少数类的噪声样本会带来更大的影响
一些简单的分类器, 如KNN, 朴素贝叶斯, 在面对噪声时会比其他各种复杂的分类器更加鲁棒
这些影响在现实的不平衡数据集中并非是单独出现的, imbalance/overlapping/sparsity往往同时出现.
当imbalance ratio逐渐升高时, 两类数据在输入空间上几乎必然会产生overlapping(除非两者的真实分布完全分离), 而在overlapping程度随之升时, 少数类的cluster中必然会插入更多的异类样本, 随之而来的是更加严重的sparsity.
不平衡数据训练优化方法
本质上看, 几乎所有不平衡学习算法都在调整和控制四个核心影响因素:
训练集大小(training set size)
类优先级(class priors)
类别误分代价(cost of errors in different classes)
决策边界的设置(placement of decision boundaries)
对应的算法大多直接从三个层面入手:
数据层面
学习层面
数据与学习结合的层面
下面是按类别划分的多种方法.
收集更多数据
毫无疑问是最有效的.
数据层面
通过采样改变数据的类别分布, 将问题转化为平衡分类问题. 一般分为过采样和欠采样两种, 以及两种采样方法各种复杂的变形.
这种方法会直接改变训练集的分布情况, 在实际使用时更具数据情况灵活选择.
数据采样方法能够有效处理不平衡数据集上的分类问题.
过采样(oversampling)
过采样通过向数据集中加入少数类样本来得到平衡的训练数据集, 一般在数据量较少时使用.
随机过采样
这种方法非常容易导致overfitting, 原因是在某一点上存在多个同样的样本会导致输入空间中不平滑的分布, 从而学习出一个不平滑的决策边界(decision boundary).
SMOTE
由于简单的随机过采样方法表现不好, 非常容易过拟合, 因此有各种优化的过采样方法, SMOTE就是其中最常见的一种.
SMOTE方法计算每一个少数类样本的K-nearest neighbor, 根据每一个样本的KNN中少数/多数类样本的占比来判断该样本邻近的数据结构, 然后进行插值计算生成新样本点.
SMOTE的目标是在少数类样本的cluster内部通过均值产生多个新的样本, 合成并向数据集中增加人工数据, 这样产生的数据分布更为平滑, 可以在完善少数类数据分布的同时一定程度上缓解过采样带来的overfitting.
SMOTE方法解决不平衡分类问题的方向有重要意义, 但仍存在不少缺陷, 更多基于SMOTE的算法由此提出.
例如上面使用KNN与SMOTE结合, 只对少数类内部的结点进行插值, 以避免overlapping的问题, 因此被称为BorderlineSMOTE.
欠采样(undersampling)
欠采样方法通过丢弃数据集种的多数类样本来得到平衡训练数据集, 一般在数据量相对较多时使用.
随机欠采样
对比与随机过采样, 随机欠采样就是随机地对多数类样本进行抛弃, 以达到训练集近似平衡的目的.
但数据的抛弃一定会导致信息损失. 随机抛弃多数类样本, 很可能会丢弃含有重要信息的多数类数据.
欠采样与集成学习结合的混合方法
目的是在降采样时尽量保持原有的数据结构来保证不会丢弃含有重要信息的数据点. 多次降采样, 并通过集成学习训练多个基学习器, 来弥补信息损失.
经典的算法有BalanceCascade.
学习算法层面
此类方法通常通过改变已有的学习算法来使其倾向于重视少数类数据的模式, 最常见的例如:
加入数据权重
对误分类数据的惩罚(cost sensitive learning)
来使学习算法在不平衡数据上工作.
加入数据权重
在训练分类器时, 为少数类样本赋予更大的权值, 为多数类样本赋予较小的权值.
还有, 数据权重的方法通常与boosting方法结合, 利用boosting算法的特点进行学习.
对误分类数据的惩罚
代价敏感学习详细考虑不同类别错判的代价, 即对不同类别的误分类样本施加不同的罚项(penalty), 来使模型的输出更加倾向于少数类.
基于代价敏感的学习算法有三种实现方式:
将误判代价作为原始数据集上的权重, 将误判代价作为原始数据集上的权重,然后用采样方法调整数据集类别比例, 根据该权重选择最优的类别比例
引入集成方法, 将代价最小化技术融入分类学习算法中, 以获得一个集成的分类模型. 例如AdaCost算法, 是一种典型的基于集成方法的代价敏感学习算法
直接将代价方程加入现有的分类学习算法进行修正, 对不同的分类学习算法有不同的修正方式
Ensemble集成方法
集成方法的基本思想是, 利用算法从训练集学习得到一系列子分类器, 然后利用这些子分类器的某种集成来提高分类准确率.
简单的例如EasyEnsemble算法. 这是一种bagging算法, 通过多次放回采样, 产生多个不同的训练集, 进而训练多个不同的分类器, 通过组合多个分类器的结果得到最终的结果.
BalanceCascade是一种boosting方法, 在采样部分有介绍.
再例如SMOTEBoost, AdaCost等都是一些实际表现优秀的算法.
参考资料
最后更新于