ML调优-Spark中的交叉验证



我正在查看中的交叉验证代码示例https://spark.apache.org/docs/latest/ml-tuning.html#cross-验证

上面写着:

CrossValidator首先将数据集拆分为一组折叠,这些折叠用作单独的训练和测试数据集。例如,当k=3倍时,CrossValidator将生成3个(训练、测试(数据集对,每个使用2/3的数据进行训练,1/3用于测试

所以我不明白为什么代码中的数据在训练和测试中是分开的:

// Run cross-validation, and choose the best set of parameters.
val cvModel = cv.fit(training)
// Prepare test documents, which are unlabeled (id, text) tuples.
val test = spark.createDataFrame(Seq(
(4L, "spark i j k"),
(5L, "l m n"),
(6L, "mapreduce spark"),
(7L, "apache hadoop")
)).toDF("id", "text")
// Make predictions on test documents. cvModel uses the best model found (lrModel).
cvModel.transform(test)
.select("id", "text", "probability", "prediction")
.collect()
.foreach { case Row(id: Long, text: String, prob: Vector, prediction: Double) =>
println(s"($id, $text) --> prob=$prob, prediction=$prediction")
}

是否可以在不分离数据的情况下应用交叉验证并获得预测?

数据被分为trainingtest,以防止再次使用用于调整超参数的相同数据来评估结果模型的性能。这是为了避免根据训练的数据来评估模型,因为那样你会过于乐观。

也许把CCD_ 5看作";验证";数据集,因为CCD_ 6在每个CCD_。

这里有一个很好的解释嵌套交叉验证

另请参阅此问题,以更好地解释为什么将数据分为3组是有意义的。

最新更新