Spark:如何对 LabeledPoint 进行欠采样?

Spark: How to perform undersampling on LabeledPoint?

我的 LabeledPoint 中有一些不平衡的数据。我想做的是 select 所有正数和 n 倍的负数(随机)。例如,如果我有 100 个正数和 30000 个负数,我想创建一个新的 LabeledPoint,其中包含所有 100 个正数和 300 个负数(n=3).

在真实场景中,我并不知道一开始我有多少积极因素和消极因素。

推测你的数据是RDD[LabeledPoint]。您可以执行以下操作:

val pos = rdd.filter(_.label==1)
val numPos=pos.count()
val neg = rdd.filter(_.label==0).takeSample(false, numPos*3)
val undersample = pos.union(neg)

您可以找到 takeSamplefilterunion here 的文档。