apache-spark - 如何为二元分类选择平衡采样?

标签 apache-spark machine-learning apache-spark-mllib

这是我的代码,从配置单元加载数据,并进行样本平衡:

// Load SubSet Data
val dataList = DataLoader.loadSubTrainTestData(hiveContext.sql(sampleDataHql))

// Split Data to Train and Test
val data = dataList.randomSplit(Array(0.7, 0.3), seed = 11L)

// Random balance train data
val sampleCount = data(0).map(rec => (rec.label, 1)).reduceByKey(_ + _)

val positiveSample = data(0).filter(_.label == 1).cache()
val positiveSize = positiveSample.count()

val negativeSample = data(0).filter(_.label == 0).cache()
val negativeSize = negativeSample.count()

// Build train data
val trainData = positiveSample ++
negativeSample.sample(withReplacement = false, 1.0 * positiveSize.toFloat / negativeSize, System.nanoTime())

// Data size
val trainDataSize = positiveSize + negativeSize
val testDataSize = trainDataSize * 3.0 / 7.0

我计算trainDataSize和testDataSize来评估模型置信度

最佳答案

好吧,我还没有测试过这段代码,但它应该是这样的:

val data: RDD[LabeledPoint] = ???

val fractions: Map[Double, Double] = Map(0.0 -> 0.5, 1.0 -> 0.5)
val sampledData: RDD[LabeledPoint] = data
  .keyBy(_.label)
  .sampleByKeyExact(false, fractions)  // Optionally with seed
  .values

您可以将 LabeledPoint 转换为 PairRDD,而不是使用您希望使用的分数应用sampleByKeyExact。

关于apache-spark - 如何为二元分类选择平衡采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38136828/

相关文章:

python - 错误 "AttributeError: ' Py4JError'对象没有属性 'message'构建DecisionTreeModel

python - StringIndexerModel inputCol

java - 如何从 JavaPairRDD 中过滤记录

apache-spark - 如何在 Spark RDD 中选择一系列元素?

matlab - 机器学习 - 训练步骤

python-3.x - 线性回归决定系数背后的直觉

scala - 计算向量距 K-means 簇中心的距离

python - 官方文档中的 pyspark 线性回归示例 - 结果不好?

python - 如何在 pyspark.sql 中创建表作为选择

tensorflow - 为什么测试集上的 MSE 非常低并且似乎没有进化(在增加 epoch 后没有增加)