类不平衡问题的处理办法
类不平衡问题是分类任务中常遇到的问题,有的时候标签的真实数据分布本身就是不平衡的。如何改善类不平衡问题,参考《applied predictive modeling》p290-p300,给出以下方案。有2个角度:数据角度、模型训练角度
数据角度
1.调整样本权重
这种方法主要是在提升法为基础的算法中使用:如Adaboost每个基学习器迭代生成的过程中,对数据样本的权重都在更新,在更新过程的算法中除了固有地增加错分样本的权重以外,还可以增大少数类样本的权重,凸显其重要性。
2.抽样方法
大致思想:人为从数据集中抽取各类比例相平衡的样本,用于训练模型。但是要注意,评估模型所选取的测试集的标签必须是和从数据集估计的标签先验分布是相同的(即测试集要与数据集的类不平衡状态一致),,才能如实估计模型预测未来样本的能力,否则有偏导致结果估计过于乐观(真实使用情况更糟)。
2.1向下抽样
描述:通过从多数类中抽样,减少多数类样本数量以达到类平衡的目的。
实现方法:
- ①多数类中简单随机抽样(无放回);
- ②多数类中bootstrap抽样(有放回抽样):这种方法能够估计向下抽样的方差;
- ③随机森铃模型通过分层变量控制bootstrap过程,自发进行向下抽样(即模型内在已集成的向下抽样方法)
2.2向上抽样
描述:通过某种方法对少数类样本扩增、平衡类数量。
实现方法:
- ①SMOTE(少数类样本合成过度抽样技术):对每一个少数类样本,用它和它k近邻样本的各种特征随机组合来合成新的样本。
3.模型调优(tuning)
模型调优是从整体上提升预测的准确率,但不一定保证预测少数类的准确率提升。
方法:
①调优参数(定义候选的参数集合,将参数带入模型训练、评估):网格搜索、随机搜索
②对训练集应用重抽样技术(获取验证集验证训练模型的效能,选取最优):交叉验证、bootstrap
③用足够大的测试集以获取合理的模型评估精度。
4.代价敏感度训练
优化代价函数:在代价函数中赋予对少数类预测损失更大的权重。
注意:预测的潜在成本包括:犯特定错误的成本、犯该错误的概率、类先验概率。(p298页详细解释)
5.调整先验概率
这是针对于将先验概率纳入模型训练的方法,如:朴素贝叶斯、判别分析。(这些方法在用户不指定先验概率的时候,通常是从训练数据中计算类比例以代替先验。)
6.选择概率截点
分类模型大多数都会输出一个小数值,这个值在类加和起来后等于1,满足概率定义,因此可以看做预测的属类概率。一般在二分类下,模型默认0.5为概率截点,大于为1,小于为0。如果我们改动这个截点值,相应的预测判类也会变动(影响预测概率在截点值附近的样本判类)。
我们需要借助ROC曲线来选取最佳概率截点。ROC曲线的绘制是借助不断调整概率截点,获取一系列(灵敏度,1-特异度)的点来绘制的曲线。
2种从ROC选择概率截点的方法:
- 以个人目标为中心的方法(主观根据一类错误、二类错误的风险,判断偏向于灵敏度还是特异度)
- 选择距离左上角(完美模型)最近的点。