Spark:如何在LabeledPoint上执行欠采样?

Maj*_*116 4 scala sampling apache-spark

我的数据中有一些不平衡的数据LabeledPoint.我想做的是选择所有正面和n次数更多负面(随机).例如,如果我有100正面和30000负面,我想LabeledPoint用所有100正面和300负面创建新的(n=3).

在实际情况中,我并没有在开始时有多少积极和消极.

Mat*_*ves 7

大概你的数据是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)
Run Code Online (Sandbox Code Playgroud)

你可以找到的文档takeSample,filter以及union 在这里.