类别不平衡问题
最近在竞赛中遇到了类别不平衡的相关问题,于是决定系统的学习一下,简单的记录一下,以下内容可能包含某些前辈的博客,如果侵权请联系删除。
什么是类别不平衡
类别不平衡也就是正负样本在数据集中的占比非常不均匀,人就是其中一类比另一类多得多。类别不平衡还有一个其他的名称:数据偏斜。这是在现实生活中不可避免的问题,比如我们如果要预测一种罕见病,既然是罕见病,那么患它的患者一定比较少,所以在这样的数据集中正样本占比就会比较少,这种情况下是不容易学到一个好的分类器的。查阅了相关资料,基本上就是三种方法:加权处理;过采样;降采样;
加权处理
也就是给不同的类设置不同的权重,加权的操作如下:
- 根据类别信息给各个类别设置权重,
- 遍历所有样本,为样本设置其类别所对应的权重
- 将样本权重带入模型进行训练
一般损失函数默认每个样例具有相同的权重,加权处理通过对少数类赋予较大的权重,使得少数类能在损失函数中具有较强的重要性,减轻了多数类对损失函数结果影响过大的问题。
过采样
就是增加少数类,让各个类别的样例数目接近,然后学习,常见的有随机过采法和SMOTE采样还有基于聚类的过采样。
随机过采样
通过增加少数类样本来提高少数类的分类性能 ,最简单的办法是随机复制少数类样本。
基于聚类的过采样
K-Means聚类算法独立地被用于少数和多数类实例,之后,每个聚类都过采样使得相同类的所有聚类有着同样的实例数量。
SMOTE采样
利用KNN技术,对于少数类样本a, 随机选择一个最近邻的样本b, 然后从a与b的连线上随机选取一个点c作为新的少数类样本。
欠采样
就是通过某种策略去除一些多数类,使得各个类别样例数量接近,然后进行学习。常见的有随机欠采样和集成技术。
随机欠采样
通过随机地去掉一些多数类样本来减小多数类的规模。
集成技术
欠采样中的算法集成技术是利用集成学习机制,将反例划分为若干个集合供不同学习器使用,这样对每个学习器来看都进行了欠采样,但在全局来看却不会丢失重要信息,一般适用于数据集足够大的情况。这里的集成技术可以分为基于Bagging的方法和基于Boosting的方法。