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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理Auto-Sklearn中多类分类的不平衡数据集的最佳方法相关的知识,希望对你有一定的参考价值。

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

答案

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

SMOTE Paper

这是针对该问题综合采样了一个或多个少数派。引用论文:

[少数族裔类别通过抽取每个少数族裔类别而被过度采样样本并沿线段介绍综合示例加入任何/全部k个少数群体中最接近的邻居。取决于根据所需的超采样量,最近的邻居是随机选择的。

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

这里是有关different oversampling algorithms的好读物。它包括使用ADASYNSMOTE进行过采样。

我希望这会有所帮助。

另一答案

另一种方法是根据类的大小设置权重。付出的努力很少,而且看起来效果很好。我正在寻找在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

我希望这会有所帮助:)

另一答案

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

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

作者认为:

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

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

以上是关于处理Auto-Sklearn中多类分类的不平衡数据集的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

多类分类问题中的不平衡 - 四个目标级别

多类文本分类不平衡,处理类“其他”

在sklearn python中处理逻辑回归分类器中的极端不平衡多类

R中多类分类的ROC曲线

XGBoost 中多类分类的损失函数是啥?

LibSVM for MATLAB中多类分类概率估计的解释