Spark: как выполнить недостаточную выборку на LabeledPoint?

У меня есть некоторые несбалансированные данные в моем LabeledPoint. то, что я хочу сделать, это выбрать все положительные и n раза больше отрицательных (случайным образом). Например, если у меня есть 100 положительных и 30000 отрицательных, я хочу создать новый LabeledPoint со всеми 100 положительными и 300 отрицательными (n=3).

И в реальном сценарии я не знаю, сколько плюсов и минусов у меня было в начале.


person Maju116    schedule 24.11.2015    source источник


Ответы (1)


Предположительно ваши данные 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)

Вы можете найти документы для takeSample, filter и union здесь.

person Matthew Graves    schedule 24.11.2015