2016-11-11 2 views
0

Comment puis-je obtenir le résultat de l'évaluateur dans un pipeline d'étincelles?Évaluation du pipeline Spark

val evaluator = new BinaryClassificationEvaluator() 

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

Le résultat de l'opération de transformation ne contiennent que les étiquettes, des probabilités et des prévisions.

Il est possible d'obtenir un "meilleur modèle" mais je serais plutôt intéressé à obtenir les mesures d'évaluation.

Ici, ils montrent comment utiliser un évaluateur sans pipeline. Aucun des liens très intéressants semblent utiliser le evaluator. https://benfradet.github.io/blog/2015/12/16/Exploring-spark.ml-with-the-Titanic-Kaggle-competition, ici https://developer.ibm.com/spark/blog/2016/02/22/predictive-model-for-online-advertising-using-spark-machine-learning-pipelines/ ou dans les exemples officiels https://github.com/apache/spark/blob/39e2bad6a866d27c3ca594d15e574a1da3ee84cc/examples/src/main/scala/org/apache/spark/examples/ml/ModelSelectionViaCrossValidationExample.scala est le résultat de l'évaluateur affiché enfin.

En fait l'un des liens calcule la métrique à la main:

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

Je me serais attendu à obtenir les mesures sur un niveau de repli de perf ou peut-être une moyenne/variance.

+0

vous êtes intéressé par la mesure de la performance par 'valeur paramGrid'? – mtoto

+0

Sorte de. Je veux vérifier si le paramétrage A ou l'algorithme B est meilleur qu'un autre paramètre/algorithme. –

Répondre

1

CrossValidatorModel ne contient pas seulement le meilleur modèle avec la métrique de validation croisée la plus élevée entre les plis - également connue sous le nom de bestModel - mais aussi les métriques pour chaque carte param évaluée.

Pour saisir ceux-ci, vous pouvez utiliser la méthode getEstimatorParamMaps en combinaison avec avgMetrics, par exemple:

val cvModel = cv.fit(training) 
cvModel.getEstimatorParamMaps.zip(cvModel.avgMetrics) 
+1

Merci beaucoup - juste ce que je cherchais. –

+0

mais il n'est pas possible d'obtenir des mesures concernant la variance/std-dev? –