机器学习 - 如何解决不均衡样本的分类问题
文本翻译(和精简)自 Upasana 小姐姐的文章 Imbalanced Data: How to handle Imbalanced Classification Problems
原文链接:
https://www.analyticsvidhya.com/blog/2017/03/imbalanced-data-classification/
1. 简介
类别不均衡问题在机器学习和数据科学上十分常见。在类别不均衡时,属于一个类别的样本数量显着低于属于其他类别的样本数量。
例如,在异常检测问题 – 如银行欺诈交易、罕见疾病的识别等问题中,类别不均衡尤其突出。在这种情况下,使用常规机器学习算法开发的预测模型可能会产生偏差。这是因为机器学习算法通常旨在通过减少错误来提高准确性(accuracy)。
本指南介绍了使用各种采样技术解决类别不平衡问题。我们还将权衡每种技术的优缺点。最后,我将介绍一种方法,您可以使用该方法创建平衡的类别分布并应用专门为此目的设计的集成学习技术。
2. 样本不均衡面临的挑战
2.1 样本不均衡的例子
Ex: 在新手推荐的活动中,预测用户是否会注册。
- 总观测值= 1000
- 注册的用户数 = 20
- 未注册的用户数 = 980
- 事件发生率 = 2%
用户注册是一个罕见现象。一般的机器学习算法,如决策树、逻辑回归倾向于只预测占多数的类(即用户未注册)。少数类(用户注册)被视为噪音,通常被忽略。这时,准确率accuracy不能很好的衡量分类器的好坏。因为一个只输出“0”的算法的准确率都能达到98%。
样本不均衡的其他例子
- 识别客户流失。因为绝大多数客户将继续使用我们的服务。具体来说,telecom的客户流失率低于2%。
- 在医学诊断等中识别罕见疾病
- 自然灾害(如地震)的识别
那么,如何获得平衡的数据集呢?
3.解决样本不均衡问题的方法
3.1 从数据层面解决 – 重采样 (Resampling)
3.1.1 随机欠采样(Random Under-Sampling)
通过随机删除多数类别的样本来平衡类别分布。
- 好处
- 当训练数据集很大时,可以通过减少训练数据样本的数量来帮助改善运行时间和存储问题。
- 缺点
- 丢弃可能有用的信息。
- 随机欠采样选择的样本可以是有偏差的样本, 它不会是整体分布的准确代表。因此,可能导致实际在测试集上的结果不准确。([译者注] 可以考虑对各类别尝试不同的采样比例,不一定是1:1,有时候1:1反而不好,因为与现实情况相差甚远。)
3.1.2 随机重采样(Random Over-Sampling)
通过随机重复取少数类别的样本来平衡类别分布。
- 好处
- 与欠采样不同,此方法不会导致信息丢失。
- 此方法优于随机欠采样
- 缺点
- 重复取少数类别的样本,因此增加了过拟合的可能性。
3.1.3 基于聚类的重采样 (Cluster-Based Over Sampling)
对多数类别样本和少数类别样本都做K-means聚类,然后对每一个聚类簇进行重采样。下面举一个例子:
原始数据为
- 总观测值= 1000
- 注册的用户数 = 20
- 未注册的用户数 = 980
对注册的用户和未注册的用户都进行聚类,得到:
- 未注册用户的聚类簇
- Cluster 1: 150 Observations
- Cluster 2: 120 Observations
- Cluster 3: 230 observations
- Cluster 4: 200 observations
- Cluster 5: 150 observations
- Cluster 6: 130 observations
- 注册用户的聚类簇
- Cluster 1: 8 Observations
- Cluster 2: 12 Observations
对每个聚类簇都进行重采样,得到:
- 未注册用户的聚类簇
- Cluster 1: 170 Observations
- Cluster 2: 170 Observations
- Cluster 3: 170 observations
- Cluster 4: 170 observations
- Cluster 5: 170 observations
- Cluster 6: 170 observations
- 注册用户的聚类簇
- Cluster 1: 250 Observations
- Cluster 2: 250 Observations
好处:
- 解决类别不平衡问题
- 同时解决了一个类别中不同聚类簇的不平衡问题
坏处:
- 和重采样一样,会有over-fitting问题出现
3.1.4 合成少数类过采样技术 (Synthetic Minority Over-sampling Technique, SMOTE)
此方法用来解决直接复制少数类样本导致的过拟合问题。SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
该算法的模拟过程采用了KNN技术,模拟生成新样本的步骤如下:
- 计算出每个少数类样本的K个近邻;
- 从K个近邻中随机挑选N个样本进行随机线性插值,从而构造新的少数类样本;
- 将新样本与原数据合成,产生新的训练集;
图示如下:
3.2 从算法层面解决数据不平衡
3.2.1 使用集成学习
原文中提到bagging和boosting两大类方法,其中boosting提到了Adaboost, gradient boost 和 xgboost. 这些之前我在博客里都有介绍。
(xgboost: https://blog.csdn.net/weixin_41332009/article/details/113823657)
我认为用集成学习的方法能够解决类别不平衡的问题的原因是:尤其是在boosting方法中,分类器每一步会关心上一步分错的那些样本,这样分类器就会越来越关心少数类样本,把它们的权值提高。久而久之,就能够将少数样本正确分类了。(译者注)
3.2.1 对小类错分进行加权惩罚(译者注)
对分类器的小类样本数据增加权值,降低大类样本的权值。从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。
3.2.2 从重构分类器的角度出发(译者注)
仔细对你的问题进行分析与挖掘,是否可以将你的问题划分成多个更小的问题,而这些小问题更容易解决。例如:
- 将你的大类压缩成小类;
- 将二分类问题改成多分类问题