2

를 사용하여 교육 NaiveBayes 모델에 대한 CrossValidator를 사용하여 정밀/리콜을 얻는 방법 : 당신이 볼 수 있듯이나는이 같은 파이프 라인을 Supossed 불꽃

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) 

가 나는 MultiClassClassificationEvaluator를 사용하여 CrossValidator을 정의했다. 테스트 프로세스 중에 Precision/Recall 같은 메트릭을 얻는 예제가 많이 있지만 테스트 목적으로 다른 데이터 세트를 사용할 때 이러한 metris를 얻습니다 (예 : documentation 참조).

CrossValidator는 폴드를 만들고 하나의 폴드가 테스트 용도로 사용되며 CrossValidator가 가장 좋은 모델을 선택합니다. 내 질문은, 훈련 과정에서 Precision/Recall 측정 항목을 얻는 것이 가능하다는 것입니다.

답변

1

실제로 실제로 저장되는 유일한 메트릭은 Evaluator의 인스턴스를 만들 때 정의한 메트릭입니다. 전 하나 인 기본값

  • areaUnderROC
  • areaUnderPR

, 그리고 setMetricName 방법을 사용하여 설정 될 수있다 다음 BinaryClassificationEvaluator은이 두 값 중 하나를 취할 수있다.

이 값은 교육 과정 중에 수집되며 CrossValidatorModel.avgMetrics을 사용하여 액세스 할 수 있습니다. 값의 순서는 EstimatorParamMaps (CrossValidatorModel.getEstimatorParamMaps)의 순서에 해당합니다.

+0

@ zero233 내 스파크에서 avgMetrics 및 기타 특성을 찾지 못하는 것 같습니다. cvModel.avgMetrics -------------------------------------------- ------------------------------- AttributeError 추적 (가장 최근의 마지막 통화) in () ----> 1 cvModel.avgMetrics AttributeError : 'CrossValidatorModel'객체에 'avgMetrics'속성이 없습니다. – Baktaawar

관련 문제