繁体   English   中英

Spark:RDD[LabeledPoint] 联合的尺寸不匹配错误

[英]Spark: Dimensions mismatch error with RDD[LabeledPoint] union

理想情况下,我想执行以下操作:本质上,我想要做的是我的数据集 RDD[LabeledPoint],我想控制正负标签的比例。

val training_data: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(spark, "training_data.tsv")

该数据集包含案例和控件。 我想控制案例与控件的比例(我的数据集有偏差)。 所以我想做一些类似 sample training_data 的事情,这样案例与控件的比率是 1:2 (而不是 1:500 说)。

因此,我无法做到这一点,我将训练数据分为以下案例和控件,然后尝试稍后使用联合运算符将它们组合起来,这给了我维度不匹配错误。

我有两个数据集(都是 Libsvm 格式):

val positives: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(spark, "positives.tsv")
val negatives: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(spark, "negatives.tsv")

我想将这两者结合起来形成训练数据。 注意两者都是 libsvm 格式。

training = positives.union(negatives)

当我在模型构建(例如逻辑回归)中使用上述训练数据集时,我会出错,因为正数和负数都可以具有不同数量的列/维度。 我收到此错误:“与另一个汇总器合并时尺寸不匹配”知道如何处理吗?

另外,我还想做采样之类的

positives_subset = positives.sample()

我能够通过以下方式解决这个问题:

  def create_subset(training: RDD[LabeledPoint], target_label: Double, sampling_ratio: Double): RDD[LabeledPoint] = {
    val training_filtered = training.filter { case LabeledPoint(label, features) =>  (label == target_label) }
    val training_subset = training_filtered.sample(false, sampling_ratio)
    return training_subset
  }

然后调用上述方法为:

  val positives = create_subset(training, 1.0, 1.0)
  val negatives_sampled = create_subset(training, 0.0, sampling_ratio)

那么你可以把联合当作:

  val training_subset_double = positives.union(negatives_double)

然后我能够使用 training_subset_double 进行模型构建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM