训练集标签类别不平衡是机器学习模型训练非常常见的一个问题。它是指训练集中标签A和标签B样本数比例差别很大,当要预测小类标签,即使模型的效果特别差,模型预测的准确率也能达到很高的数值。因此,我们需要处理不平衡的数据集,避免这种情况出现。
一般情况下,我们需要处理的是极不平衡的问题(比如类别比例在1:100)。
在类别不平衡的情况下,关于混淆矩阵评估指标(准确率:accuracy;精确率:precision;召回率:recall)的解读:
- 高召回率+高精确率:模型具有很全很好的预测效果
- 低召回率+高精确率:模型不能全面的预测结果,但预测的效果很好
- 高召回率+低精确率:模型能全面的预测类别,但预测效果不是很好
- 低召回率+低精确率:模型基本没有预测效果
数据标签不平衡处理方法:数据层面的方法和集成算法层面的处理方法
1、 数据层面
主要方法有重采样,通过采样将数据集的小类标签增多,或将大类标签减少。
- 随机下采样:通过随机算法将大类标签的样本减少,以达到标签平衡。
优点:大数据中减少样本数据量提高训练速度和存储问题。
缺点:容易损失一些潜在的有用信息。 - 随机上采样:和随机下采样相反,利用随机算法那将小类标签样本增加,以达到标签平衡。
优点:没有信息的损失。
缺点:会给模型带来过拟合的问题。 - SMOTE:属于过采样。在训练集中对小类样本进行分析并根据小类样本人工合成新样本。
优点:解决了随机过采样的过拟合问题。
缺点:对于高维数据效率较低。 - EasyEnsemble:属于下采样。利用集成学习机制对数据集进行下采样。
优点:解决了随机下采样的信息损失问题
缺点:
2、集成算法层面
主要是模型训练时通过对数据集中的样本进行采样训练。
- Bagging算法:Bagging是Bootstrap Aggregating的缩写,Bagging算法的基本思路:
1、对数据集进行 m m m次有放回的随机采样,得到具有 m m m个样本的采样集;
2、重复(1)的采样 T T T次,得到 T T T个这样的采样集;
3、每个采样集训练一个基学习器;
4、最后,分类任务对 T T T个基分类器使用简单的投票法。回归任务则使用简单的平均法。
优点:每个基学习器只使用了初始训练集的约63.2%的样本,剩下的样本可以用于验证集使用,评估基学习器的泛化性能。代表模型随机森林
为什么每个基学习器只使用了初始数据集的约63.2%的样本?
因为在有放回的随机采样m个样本的过程中,训练集中样本始终不被采的概率是 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1−m1)m,则取极限得到 lim m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim \limits_{m \to \infin}(1-\frac{1}{m})^m=\frac{1}{e}\approx0.368 m→∞lim(1−m1)m=e1≈0.368。则这部分样本始终是不能被训练到的,因此,bagging算法使用这部分样本作为验证集。 - Boosting算法:一个将弱学习器提升为强学习器的算法。Boosting算法的基本思路:
1、使用初始训练集训练基学习器;
2、根据基学习器训练的结果对训练样本分布进行调整,对上一轮训练的基学习器分类错误的样本增加权重,使得后续训练更容易被训练到;
3、基于调整后的样本分布训练下一个基学习器
4、重复(1)(2)(3)直到基学习器数目到达事先指定的值 T T T,最终将这 T T T个基学习器进行加权结合。
优点:每一轮训练都会对样本进行权重更新,不断提升基学习器的分类准确率。代表模型:XGBoost和LightGBM
总结:一般认为,对于使用逻辑回归这样的模型时,先使用SMOTE处理不平衡问题;而对于随机森林、XGBoost和LightGBM模型时,则在评估模型时是使用合理的方法。