Como obter o Precision / Recall usando o CrossValidator para treinar o NaiveBayes Model usando o Spark

Suposto eu tenho um pipeline como este:

val tokenizer = new Tokenizer().setInputCol("tweet").setOutputCol("words")
val hashingTF = new HashingTF().setNumFeatures(1000).setInputCol("words").setOutputCol("features")
val idf = new IDF().setInputCol("features").setOutputCol("idffeatures")
val nb = new org.apache.spark.ml.classification.NaiveBayes()
val pipeline = new Pipeline().setStages(Array(tokenizer, hashingTF, idf, nb))
val paramGrid = new ParamGridBuilder().addGrid(hashingTF.numFeatures, Array(10, 100, 1000)).addGrid(nb.smoothing, Array(0.01, 0.1, 1)).build()
val cv = new CrossValidator().setEstimator(pipeline).setEvaluator(new BinaryClassificationEvaluator()).setEstimatorParamMaps(paramGrid).setNumFolds(10)
val cvModel = cv.fit(df)

Como você pode ver, eu defini um CrossValidator usando um MultiClassClassificationEvaluator. Eu já vi muitos exemplos obtendo métricas como Precision / Recall durante o processo de teste, mas essas medidas são obtidas quando você usa um conjunto diferente de dados para fins de teste (veja, por exemplo,documentação)

Pelo meu entendimento, o CrossValidator criará dobras e uma dobra será usada para fins de teste; o CrossValidator escolherá o melhor modelo. Minha pergunta é: é possível obter métricas de Precisão / Recuperação durante o processo de treinamento?

questionAnswers(1)

yourAnswerToTheQuestion