Machine learning Spark K-折叠交叉验证
我在理解Spark的交叉验证时遇到了一些问题。我见过的任何一个例子都使用它进行参数调整,但我假设它也会进行常规的K倍交叉验证 我想做的是执行k倍交叉验证,其中k=5。我想得到每个结果的准确度,然后得到平均准确度。 在scikit中,了解这是如何完成的,分数将给出每次折叠的结果,然后您可以使用分数。mean() 我在Spark中就是这样做的,paramGridBuilder是空的,因为我不想输入任何参数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()
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学习实现的功能相同吗?为什么示例在进行交叉验证时使用培训/测试数据
对于每个估计器ParamMaps(一组参数),使用CV对算法进行测试,因此avgMetrics是所有折叠上的平均交叉验证精度度量/s。 在使用空的
ParamGridBuilder
(无参数搜索)的情况下,就像进行“常规”交叉验证一样,我们将得到一个交叉验证的训练精度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