【发布时间】:2017-06-02 15:37:27
【问题描述】:
如何从CrossValidatorModel 中的spark.ml 中获取每个折叠的计算指标?我知道我可以使用model.avgMetrics 获得平均指标,但是否有可能获得每个折叠的原始结果以查看例如。结果的方差?
我使用的是 Spark 2.0.0。
【问题讨论】:
标签: apache-spark apache-spark-ml
如何从CrossValidatorModel 中的spark.ml 中获取每个折叠的计算指标?我知道我可以使用model.avgMetrics 获得平均指标,但是否有可能获得每个折叠的原始结果以查看例如。结果的方差?
我使用的是 Spark 2.0.0。
【问题讨论】:
标签: apache-spark apache-spark-ml
对于折叠,您可以像这样自己进行迭代:
val splits = MLUtils.kFold(dataset.toDF.rdd, $(numFolds), $(seed))
//K-folding operation starting
//for each fold you have multiple models created cfm. the paramgrid
splits.zipWithIndex.foreach { case ((training, validation), splitIndex) =>
val trainingDataset = sparkSession.createDataFrame(training, schema).cache()
val validationDataset = sparkSession.createDataFrame(validation, schema).cache()
val models = est.fit(trainingDataset, epm).asInstanceOf[Seq[Model[_]]]
trainingDataset.unpersist()
var i = 0
while (i < numModels) {
val metric = eval.evaluate(models(i).transform(validationDataset, epm(i)))
logDebug(s"Got metric $metric for model trained with ${epm(i)}.")
metrics(i) += metric
i += 1
}
这是在 scala 中,但思路非常清晰。
查看this answer,它概述了每折的结果。希望这会有所帮助。
【讨论】: