在 python sklearn 中,有多种算法(例如回归、随机森林……等)具有 class_weight 参数来处理不平衡数据。
但是,我没有为 MLLib 算法找到这样的参数。是否有为某些 MLLib 算法实施 class_weight 的计划?或者 MLLib 中有什么方法可以处理不平衡的数据?或者我们实际上必须自己处理 MLLib 中的所有上/下采样?
谢谢!
在 python sklearn 中,有多种算法(例如回归、随机森林……等)具有 class_weight 参数来处理不平衡数据。
但是,我没有为 MLLib 算法找到这样的参数。是否有为某些 MLLib 算法实施 class_weight 的计划?或者 MLLib 中有什么方法可以处理不平衡的数据?或者我们实际上必须自己处理 MLLib 中的所有上/下采样?
谢谢!
MLLib中的算法在生产场景中一直作为baseline,确实不能处理一些工业问题,比如标签不平衡。所以如果你想使用它们,你必须平衡你的实例。
此外,Spark 中的BSP机制,可以简单地看成数据并行,这可能是 Spark 没有涵盖该问题的主要原因。Spark 可能很难将实例分发到集群中的所有节点,而每个节点的部分实例与整体共享相同的标签分布。
最后,如果您想实现它,您只需在迭代过程中对每个次要标记实例的损失值进行加权。
希望这会对你有所帮助,祝你好运-)
我过去处理不平衡类的方法之一是基于数据集样本构建分类器,以进行 50/50 样本拆分。这意味着使用与少数类相关的所有数据点,并从多数类中随机抽取相同数量的数据点。
这是否可行取决于您在少数类中实际拥有多少数据——如果您有极端的类不平衡(<5% 少数类实例),那么您可能需要考虑合成过采样。
您可能会pydf.rdd.takeSample()
在 spark 或df.sample
pandas 中查看。
我处理类不平衡的方法是通过以下方法: 1. 将出现频率最低的类合并到其他类。显然,您应该使用某种领域知识,而不是随机合并它们 2. 使用重采样技术,例如过采样、欠采样、SMOTE、ADASYN。我不推荐使用这些技术,因为它们实际上并不代表实际数据。但无论如何,你当然可以看看它们
除了上一篇文章,您还可以查看 imblearn 库 ( https://imbalanced-learn.readthedocs.io/en/stable/index.html ),它还允许您进行各种类型的过采样/欠采样作为 SMOTE / SMOTENEC