Python 自动学习中处理多类分类不平衡数据集的最佳方法

Python 自动学习中处理多类分类不平衡数据集的最佳方法,python,machine-learning,scikit-learn,multiclass-classification,Python,Machine Learning,Scikit Learn,Multiclass Classification,我使用Auto Sklearn,有一个数据集,其中包含42个严重不平衡的类。处理这种不平衡的最佳方法是什么?据我所知,在机器学习中存在两种处理不平衡数据的方法。使用重采样机制,如过采样或欠采样(或两者的组合),或通过选择需要深入了解Auto Sklearn中使用的算法的归纳偏差,在算法层面上解决该问题。我不太清楚如何处理这个问题。是否有可能直接在Auto Sklearn中解决不平衡问题,或者我是否需要使用不平衡学习等提供的重采样策略?计算模型后应使用哪种评估指标?多个班级的roc_auc_分数可

我使用Auto Sklearn,有一个数据集,其中包含42个严重不平衡的类。处理这种不平衡的最佳方法是什么?据我所知,在机器学习中存在两种处理不平衡数据的方法。使用重采样机制,如过采样或欠采样(或两者的组合),或通过选择需要深入了解Auto Sklearn中使用的算法的归纳偏差,在算法层面上解决该问题。我不太清楚如何处理这个问题。是否有可能直接在Auto Sklearn中解决不平衡问题,或者我是否需要使用不平衡学习等提供的重采样策略?计算模型后应使用哪种评估指标?多个班级的roc_auc_分数可用,因为sklearn==0.22.1。但是,Auto Sklearn仅支持版本0.21.3之前的Sklearn。提前谢谢

我过去处理高度不平衡数据集的一种方法是合成少数过采样技术(SMOTE)。以下是更好理解的文件:

这是通过对少数群体或少数群体进行综合过采样来实现的。引述该报:

少数族裔阶层通过抽取每个少数族裔阶层进行过度抽样 沿线段采样并介绍合成示例 加入任何/所有k族近邻。依靠 根据所需的过采样量,从k 最近的邻居是随机选择的

这将更接近于平衡您的数据集。在python包中有一个SMOTE的实现

这是一本很好的读物。它包括过采样以及使用


我希望这能有所帮助。

另一种方法是根据类的大小设置类的权重。努力很少,而且似乎效果很好。我想在auto sklearn中设置权重,我发现:

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


我希望这有帮助:)

对于那些感兴趣的人,作为对给出答案的补充,我可以强烈推荐以下论文:

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

作者认为:

在解决方案方面,由于预期性能不会提高 值得注意的是,使用更复杂的抽样策略,应该更加关注 分配给与算法相关的改进,而不是数据改进


例如,ChaLearn AutoML Challenge 2015使用了平衡精度,sklearn认为这是不平衡数据的拟合指标,Auto sklearn能够计算出拟合良好的模型,我将尝试一下。即使没有重新采样,结果也比仅仅使用准确度“更好”(就预测质量而言)

非常感谢,这真的很有帮助!在使用Auto Sklearn训练分类器之前,您是否也使用了SMOTE,还是使用了另一个ML管道?你是否知道除了roc_auc_分数之外,还有哪些指标可能被使用?到目前为止,我看过的所有论文都考虑了roc_auc_分数,但不幸的是,这在auto sklearn中目前无法使用。对于新手来说,不同的度量标准和抽样策略的数量是巨大的D@MoDo谢谢:)在使用不同的ML管道训练分类器之前,我使用了SMOTE。至于指标,我不完全确定,因为我可能使用了其他指标,这些指标比
roc\u auc\u得分
更适合我当时的用例。不幸的是,我似乎记不起来了。我完全理解不同的度量和抽样策略的数量是巨大的。一旦你开始每天都这样做,事情就会变得容易得多,就像其他事情一样:)