火花管道评估



如何获得火花管道中评估器的结果?

val evaluator = new BinaryClassificationEvaluator()
val cv = new CrossValidator()
  .setEstimator(pipeline)
  .setEvaluator(evaluator)
  .setEstimatorParamMaps(paramGrid)
  .setNumFolds(10)

转换操作的结果只包含标签、概率和预测。

获得"最佳模型"是可能的,但我更感兴趣的是获得评估指标。

这里https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-mllib/spark-mllib-evaluators.html他们展示了如何使用没有管道的求值器。

这些非常有趣的链接似乎都没有使用evaluator。https://benfradet.github.io/blog/2015/12/16/Exploring-spark.ml-with-the-Titanic-Kaggle-competition, https://developer.ibm.com/spark/blog/2016/02/22/predictive-model-for-online-advertising-using-spark-machine-learning-pipelines/或https://github.com/apache/spark/blob/39e2bad6a866d27c3ca594d15e574a1da3ee84cc/examples/src/main/scala/org/apache/spark/examples/ml/ModelSelectionViaCrossValidationExample.scala官方例子是评估者的结果显示。

事实上其中一个链接是手工计算的:

cvAccuracy = cvPrediction.filter(cvPrediction['label'] == cvPrediction['prediction']).count() / float(cvPrediction.count

我本来希望获得一个完美水平的指标,或者可能是一个平均值/方差。

CrossValidatorModel不仅包含具有最高平均交叉验证度量的最佳模型(即bestModel),而且还包含评估的每个参数映射的度量。

要获取这些,您可以将getEstimatorParamMaps方法与avgMetrics结合使用,例如:
val cvModel = cv.fit(training)
cvModel.getEstimatorParamMaps.zip(cvModel.avgMetrics)

最新更新