使用分区中的数据训练分类器

问题描述 投票:0回答:1

如何在分类器中的实例取决于分类索引的情况下训练带有分类器的分类器?例如,假设以下代码片段:

val data = MLUtils.loadLibSVMFile(sc, "path to SVM file")
val r = data.mapPartitionsWithIndex((index,localdata)=>{
  if (index % 2 == 0)
  {
    // train a NaiveBayes with localdata
    NaiveBayes.train(localdata)    // Error => found:iterator[LabeledPoint] , required: RDD[labeledPoint]
  }
  else
  {
    // train a DecisionTree classifier with localdata
    DecisionTree.train(localdata)    // Error => found:iterator[LabeledPoint] , required: RDD[labeledPoint]
  }
})

在我看来,错误是正确的,因为这些任务是在各自的JVM中执行的,无法从map任务中分发。这就是为什么我无法在任务中访问SparkContext的原因。但是,是否有人有其他建议可以实现我的目的?

scala apache-spark mapreduce
1个回答
0
投票

基于以上评论部分的讨论-您可以尝试一下-

   val rdd = MLUtils.loadLibSVMFile(sc, "path to SVM file")

    // approach -1
    val nb = rdd.sample(withReplacement = false, fraction = 0.5) // sample 50% of the record
    val dt = rdd.sample(withReplacement = false, fraction = 0.5) // sample 50% of the record

    //or approach-2 
    val (nb, dt) = rdd.randomSplit(Array(0.5, 0.5))

    // apply algo
    NaiveBayes.train(nb)
    DecisionTree.train(dt, strategy= ..)
© www.soinside.com 2019 - 2024. All rights reserved.