处理Auto-Sklearn中多类分类的不平衡数据集的最佳方法

时间:2020-02-20 19:15:14

标签: python machine-learning scikit-learn multiclass-classification

我正在使用Auto-Sklearn,并具有包含严重失衡的42个类的数据集。解决这种不平衡的最佳方法是什么?据我所知,存在两种在机器学习中处理不平衡数据的方法。使用重采样机制(例如,过采样或欠采样(或两者结合)),或者通过选择归纳偏置来解决算法级别的问题,这需要深入了解Auto-Sklearn中使用的算法。我不太确定如何处理此问题。是否有可能直接在Auto-Sklearn中解决不平衡问题,还是我需要使用例如提供的重采样策略?学习失衡?计算模型后应使用哪个评估指标?从sklearn == 0.22.1开始,可以使用多个类的roc_auc_score。但是,Auto-Sklearn仅支持sklearn直至0.21.3版本。提前致谢!

3 个答案:

答案 0 :(得分:2)

过去处理我高度不平衡的数据集的一种方法是合成少数族裔过采样技术(SMOTE)。这是用于更好理解的论文:

SMOTE Paper

这可以通过对这个问题的少数群体进行综合过采样来实现。引用论文:

通过抽取每个少数族裔类别来对少数族裔类别进行过度采样 样本并沿线段介绍综合示例 加入k个少数族裔阶层中的任何/全部最近邻。取决于 根据所需的过采样数量, 随机选择最近的邻居。

然后这将进一步平衡您的数据集。 python的imblearn包中有SMOTE的实现。

在这里,您可以很好地了解different oversampling algorithms。它包括使用ADASYNSMOTE进行过采样。

我希望这会有所帮助。

答案 1 :(得分:2)

另一种方法是根据类的大小设置权重。付出的努力很少,而且看起来效果很好。我一直在寻找在auto-sklearn中设置权重的方法,这就是我发现的:

https://github.com/automl/auto-sklearn/issues/113

例如,在scikit svm中,您具有参数“ class_weight”:

https://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane_unbalanced.html

我希望这会有所帮助:)

答案 2 :(得分:0)

对于那些感兴趣的人,除了给出的答案之外,我强烈推荐以下论文:

Lemnaru,C.和Potolea,R.(2011年6月)。分类问题不平衡:系统研究,问题和最佳做法。在企业信息系统国际会议上(第35-50页)。施普林格,柏林,海德堡。

作者认为:

在解决方案方面,由于性能预计不会提高 如果采用更复杂的采样策略,则应该更加关注 分配给算法相关的改进,而不是数据改进。

例如ChaLearn AutoML Challenge 2015使用了平衡的精度,sklearn认为这是不平衡数据的拟合指标,Auto-Sklearn能够计算出非常合适的模型,我将尝试一下。即使不进行重采样,结果(就预测质量而言)也比仅使用精度要好得多。

相关问题