Machine learning Spark K-折叠交叉验证

Machine learning Spark K-折叠交叉验证,machine-learning,classification,apache-spark-mllib,cross-validation,Machine Learning,Classification,Apache Spark Mllib,Cross Validation,我在理解Spark的交叉验证时遇到了一些问题。我见过的任何一个例子都使用它进行参数调整,但我假设它也会进行常规的K倍交叉验证 我想做的是执行k倍交叉验证,其中k=5。我想得到每个结果的准确度,然后得到平均准确度。 在scikit中,了解这是如何完成的,分数将给出每次折叠的结果,然后您可以使用分数。mean() 我在Spark中就是这样做的,paramGridBuilder是空的,因为我不想输入任何参数 val paramGrid = new ParamGridBuilder().build()

我在理解Spark的交叉验证时遇到了一些问题。我见过的任何一个例子都使用它进行参数调整,但我假设它也会进行常规的K倍交叉验证

我想做的是执行k倍交叉验证,其中k=5。我想得到每个结果的准确度,然后得到平均准确度。 在scikit中,了解这是如何完成的,分数将给出每次折叠的结果,然后您可以使用分数。mean()

我在Spark中就是这样做的,paramGridBuilder是空的,因为我不想输入任何参数

val paramGrid = new ParamGridBuilder().build()
val evaluator = new MulticlassClassificationEvaluator()
  evaluator.setLabelCol("label")
  evaluator.setPredictionCol("prediction")
evaluator.setMetricName("precision")


val crossval = new CrossValidator()
crossval.setEstimator(classifier)
crossval.setEvaluator(evaluator) 
crossval.setEstimatorParamMaps(paramGrid)
crossval.setNumFolds(5)


val modelCV = crossval.fit(df4)
val chk = modelCV.avgMetrics
这与scikit学习实现的功能相同吗?为什么示例在进行交叉验证时使用培训/测试数据

  • 你现在做的看起来还不错
  • 基本上,是的,它的工作原理与sklearn的相同。
    对于每个估计器ParamMaps(一组参数),使用CV对算法进行测试,因此avgMetrics是所有折叠上的平均交叉验证精度度量/s。 在使用空的
    ParamGridBuilder
    (无参数搜索)的情况下,就像进行“常规”交叉验证一样,我们将得到一个交叉验证的训练精度
  • 每个CV迭代包括
    K-1
    训练折叠和
    1
    测试折叠,那么为什么大多数示例在进行交叉验证之前将数据与训练/测试数据分开? 因为CV内的测试折叠用于参数网格搜索。 这意味着模型选择需要额外的验证数据集。 因此,需要所谓的“测试数据集”来评估最终模型
  • val paramGrid = new ParamGridBuilder().build()
    val evaluator = new MulticlassClassificationEvaluator()
      evaluator.setLabelCol("label")
      evaluator.setPredictionCol("prediction")
    evaluator.setMetricName("precision")
    
    
    val crossval = new CrossValidator()
    crossval.setEstimator(classifier)
    crossval.setEvaluator(evaluator) 
    crossval.setEstimatorParamMaps(paramGrid)
    crossval.setNumFolds(5)
    
    
    val modelCV = crossval.fit(df4)
    val chk = modelCV.avgMetrics