[英]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.