在 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 中处理不平衡的类的主要内容,如果未能解决你的问题,请参考以下文章