在 Spark 中处理不平衡的类

Posted

技术标签:

【中文标题】在 Spark 中处理不平衡的类【英文标题】:Handling imbalanced class in Spark 【发布时间】:2018-03-27 06:47:22 【问题描述】:

我正在尝试通过 spark mllib 试验信用卡欺诈检测数据集。 与 1(表示欺诈)相比,我拥有的数据集有很多 0(表示非欺诈)。 我想知道要解决像上面这样的类不平衡问题,我们在 Spark 中有任何可用的算法,比如 SMOTE。 我使用逻辑回归作为模型

【问题讨论】:

我没有尝试过,但我正在寻找与您相同问题的答案。我在 Spark 中找到了 SMOTE 的实现(未经测试/验证):gist.github.com/hhbyyh/346467373014943a7f20df208caeb19b。此外,还有关于同一问题的讨论,建议的解决方案是使用权重 (***.com/questions/33372838/…),但在示例中,类并不像欺诈数据集中那样不平衡。 @waltersantosf 非常感谢!! 【参考方案1】:

您可以在逻辑回归中尝试 weightCol,如下所示:

    temp = train.groupby("LabelCol").count()
    new_train = train.join(temp, "LabelCol", how = 'leftouter')
    num_labels = train_data.select(countDistinct(train_data.score)).first()[0]
    train1 = new_train.withColumn("weight",(new_train.count()/(num_labels * new_train["count"])))
    # Logistic Regrestion Initiation
    lr = LogisticRegression(weightCol = "weight", family = 'multinomial')

【讨论】:

以上是关于在 Spark 中处理不平衡的类的主要内容,如果未能解决你的问题,请参考以下文章

复制训练示例以处理 pandas 数据框中的类不平衡

mllib 如何在内部对不平衡数据集的类进行加权?

多类分类中的类不平衡问题

Vowpal Wabbit:不平衡的类

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

R语言中样本平衡的几种方法