不平衡类:Spark MLLib 中 ML 算法的 class_weight

数据挖掘 机器学习 阿帕奇火花 阶级失衡 加权数据
2021-10-06 12:51:46

在 python sklearn 中,有多种算法(例如回归、随机森林……等)具有 class_weight 参数来处理不平衡数据。

但是,我没有为 MLLib 算法找到这样的参数。是否有为某些 MLLib 算法实施 class_weight 的计划?或者 MLLib 中有什么方法可以处理不平衡的数据?或者我们实际上必须自己处理 MLLib 中的所有上/下采样?

谢谢!

4个回答

MLLib中的算法在生产场景中一直作为baseline,确实不能处理一些工业问题,比如标签不平衡。所以如果你想使用它们,你必须平衡你的实例。

此外,Spark 中的BSP机制,可以简单地看成数据并行,这可能是 Spark 没有涵盖该问题的主要原因。Spark 可能很难将实例分发到集群中的所有节点,而每个节点的部分实例与整体共享相同的标签分布

最后,如果您想实现它,您只需在迭代过程中对每个次要标记实例的损失值进行加权。

希望这会对你有所帮助,祝你好运-)

我过去处理不平衡类的方法之一是基于数据集样本构建分类器,以进行 50/50 样本拆分。这意味着使用与少数类相关的所有数据点,并从多数类中随机抽取相同数量的数据点。

这是否可行取决于您在少数类中实际拥有多少数据——如果您有极端的类不平衡(<5% 少数类实例),那么您可能需要考虑合成过采样。

您可能会pydf.rdd.takeSample()在 spark 或df.samplepandas 中查看。

我处理类不平衡的方法是通过以下方法: 1. 将出现频率最低的类合并到其他类。显然,您应该使用某种领域知识,而不是随机合并它们 2. 使用重采样技术,例如过采样、欠采样、SMOTE、ADASYN。我不推荐使用这些技术,因为它们实际上并不代表实际数据。但无论如何,你当然可以看看它们

除了上一篇文章,您还可以查看 imblearn 库 ( https://imbalanced-learn.readthedocs.io/en/stable/index.html ),它还允许您进行各种类型的过采样/欠采样作为 SMOTE / SMOTENEC