文章目录
参考文章:不均衡学习的抽样方法,机器学习之类别不平衡问题 (3) —— 采样方法,一文教你如何处理不平衡数据集(附代码)
类别不均衡是指在分类学习算法中,不同类别样本的比例相差悬殊,它会对算法的学习过程造成重大的干扰。比如在一个二分类的问题上,有1000个样本,其中5个正样本,995个负样本,在这种情况下,算法只需将所有的样本预测为负样本,那么它的精度也可以达到99.5%,虽然结果的精度很高,但它依然没有价值,因为这样的学习算法不能预测出正样本。这里我们可以知道不均衡问题会导致样本较少那一类的高错分率,即较少一类的样本会有较大的比例会被预测成样本数量较多的那一类。
解决类别不均衡问题的方法可参见sklearn,里面有很多可以使用的方法,举例如下:
1. 欠采样
欠采样:保存所有稀有类样本,并在丰富类别中随机选择与稀有类别样本相等数量的样本。
欠采样抛弃了大部分反例数据,对少数类别样本增加了额外的重要性,会导致高召回率低精准率。数据总是宝贵的,抛弃数据过于奢侈,可以做反复欠采样,生成多个反例数据集并与正例合并训练模型,但是训练多个模型造成了过大的开销,正例被反复使用,很容易造成正例的过拟合。
(1)NearMiss
NearMiss本质上是一种原型选择(prototype selection)方法,即从多数类样本中选取最具代表性的样本用于训练,主要是为了缓解随机欠采样中的信息丢失问题。NearMiss采用一些启发式的规则来选择样本,根据规则的不同可分为3类:
- NearMiss-1:选择到最近的K个少数类样本平均距离最近的多数类样本
- NearMiss-2:选择到最远的K个少数类样本平均距离最近的多数类样本
- NearMiss-3:对于每个少数类样本选择K个最近的多数类样本,目的是保证每个少数类样本都被多数类样本包围
(2)Tomek Link
Tomek Link表示不同类别之间距离最近的一对样本,即这两个样本互为最近邻且分属不同类别。这样如果两个样本形成了一个Tomek Link,则要么其中一个是噪音,要么两个样本都在边界附近。这样通过移除Tomek Link就能“清洗掉”类间重叠样本,使得互为最近邻的样本皆属于同一类别,从而能更好地进行分类。
(3)ENN(edited nearest neighbour)
对于属于多数类的一个样本,如果其K个近邻点有超过一半都不属于多数类,则这个样本会被剔除。这个方法的另一个变种是所有的K个近邻点都不属于多数类,则这个样本会被剔除。
最后,数据清洗技术最大的缺点是无法控制欠采样的数量。由于都在某种程度上采用了K近邻法,而事实上大部分多数类样本周围也都是多数类,因而能剔除的多数类样本比较有限。
2. 过采样
过采样:尝试通过增加稀有样本的数据集来平衡数据集,重复、自举或合成少数类过采样方法来生成稀有样本。过采样增加了少数类别样本的数目,对少数类别样本增加了额外的重要性,也会导致高召回率低精准率,但这两者的差要小于欠采样的结果。
过采样的方法举例如下:
- 随机过采样:最简单的过采样方法,只在少数类别数据集中随机重复采样即可,适合类别型数据
- 综合过采样:综合过采样分为两种:SMOTE和ADASYN
(1)SMOTE(Synthetic Minority Over-Sampling Technique)
SMOTE ,即人工少数类过采样法,它的原理如下:
- 选一个正样本
- 找到该正样本的K个近邻
- 随机从K个近邻中选出一个样本
- 在正样本和随机选出的这个近邻之间的连线上,随机找一点。这个点就是人工合成的新正样本了
SMOTE也可分为以下几种:
- Regular SMOTE:将少数类别的样本和其他任意邻居进行连线(即使是其他类别)
- Borderline SMOTE:将样本分为异常(邻居均为其他类)、安全(邻居均和本身同一类别)、处于危险中(至少一半的邻居和本身同一类别)三个类别。这样做之后,一种方法是仅仅将处于危险中的少数类别点和少数类别点连线,一种是将处于危险中的少数类别点和周围任意点连线
- SVM SMOTE:使用少数类别的支持向量生成新的样本
(2)ADASYN(ADAptive Synthetic Sampling )
3.重采样
重采样:结合以上两种方法,选取一个在两类样本数量范围内的数,对多数样本欠采样,对少数样本过采样。主要的方法是 SMOTE + ENN 和 SMOTE + Tomek
4.权重调整
sklearn中建立模型时候存在一个超参数class_weight,我们可以通过调整这个参数来处理类别不平衡问题。
5.集成学习方法
Balanced bagging