在处理分类问题过程中,数据的不平衡分布,往往对分类结果产生比较大的影响。以下是针对二项分类的数据不平衡问题进行分析。
1) 可以扩大数据样本?
扩大数据样本是一个容易被忽视的选择。在集合中,一个更大的数据集,就有有可能挖掘出不同的或许更平衡的方面。之后当寻找重复采集的数据样本时,一些小样本类数据的例子可能是有帮助的。
2)绩效标准的选择
混淆矩阵:将要预测的数据分到表里来显示正确的预测,并了解其不正确的预测类型。
精度:(准确率/命中率)一种分类准确性的处理法。
召回率:又称“查全率”,一种分类完整性的处理方法。
F1分数(F-score):精度和召回率的加权平均。
kappa(Cohen's kappa):根据数据集合中数据的不平衡点来标准化分类精度。
ROC曲线:类似于精度和召回率,准确性被分为敏感性和特异性,并且可以基于这些值的平衡阈值来进行选择。
3)数据的重新抽样
主要采用以下两种方法:
a)过抽样:通过复制少数类样本
b)欠抽样:删除多数类样本
一些经验规则:
- 当数据量很大的时候可以考虑测试欠抽样(大于一万条记录)
- 当数据量比较少时,可以考虑过抽样
- 考虑随机和非随机的抽样方案(例如分层)
- 考虑不同的重抽样比率(例如1:1 ,1:2等),比较结果
4) 尝试生成人工样本
一种简单的生成人工样本的方法是从少数类的实例中随机抽样属性。
在数据集中,可以根据经验对数据集抽样或者可以使用类似于朴素贝叶斯这种可以在反向运行时,对每个属性进行独立抽样的模型。
比较常见的算法SMOTE(Syntheic Minority Over-sampling),属于过度抽样的方法。原理是从少数类样本数据中生成人工样本,而不是创建副本。该算法选择连个或更多个类似的例子(使用距离度量),然后随机干扰一个实例中的一个属性,比较器差异。
SMOTE的深入了解,参考论文 “SMOTE:Syntheic Minority Over-sampling Technique”
SMOTE的实现:
- 在 Python中,“UnbalanceDataset”模块,提拱了许多SMOTE的实现方法,以及各种抽样技术,
- 在R中,DMwR包中提拱了SMOTE的实现方法
- Weka中,可以使用SMOTE supervised filter
5)尝试不同的算法
决策树算法在处理不平衡数据集的表现不错。流行的决策树算法有C5.0、CART、随机森林。
6)尝试名义变量模型
7)从不同的观点进行思考
异常检测和变化检测
异常检测是罕见事件的检测。这种思维的转变在于考虑以小磊作为异常值类,它可以帮助获得一种新方法来分离和分类样本。
8)尝试新的方法
可以思考将大问题分解成小问题。
相关书籍:
Imbalance Learning: Foundations,Alogrithms,and Applications
相关报刊:
- Data Mining for Imbalanced Datasets: An Overview
- Learning from Imbalanced Data
- Addressing the Curse of Imbalanced Training Sets:One-Sided Selection(PDF)
- A Study of the Behavior of Several Methods for Balancing Machine Learning Training Data