【问题标题】:How to get Precision/Recall using CrossValidator for training NaiveBayes Model using Spark如何使用 CrossValidator 获得 Precision/Recall 以使用 Spark 训练 NaiveBayes 模型
【发布时间】:2016-10-13 05:02:01
【问题描述】:

假设我有这样的管道:

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 之类的指标,但这些指标是在您使用不同的数据集进行测试时获得的(例如,参见 documentation)。

据我了解,CrossValidator 将创建折叠,其中一个折叠将用于测试目的,然后 CrossValidator 将选择最佳模型。我的问题是,是否有可能在训练过程中获得 Precision/Recall 指标?

【问题讨论】:

    标签: apache-spark apache-spark-mllib apache-spark-ml apache-spark-1.5


    【解决方案1】:

    嗯,实际存储的唯一指标是您在创建Evaluator 的实例时定义的指标。对于BinaryClassificationEvaluator,这可以采用以下两个值之一:

    • areaUnderROC
    • areaUnderPR

    前者为默认设置,可使用setMetricName 方法设置。

    这些值是在训练过程中收集的,可以使用CrossValidatorModel.avgMetrics 访问。值的顺序对应EstimatorParamMapsCrossValidatorModel.getEstimatorParamMaps)的顺序。

    【讨论】:

    • @zero233 我似乎没有在我的 spark 中找到 avgMetrics 和其他属性。 cvModel.avgMetrics ----------------------------------------------- ---------------------------- AttributeError Traceback (最近一次调用最后) in ( ) ----> 1 cvModel.avgMetrics AttributeError: 'CrossValidatorModel' 对象没有属性 'avgMetrics'
    猜你喜欢
    • 2021-11-24
    • 2020-12-11
    • 2016-10-19
    • 2016-09-28
    • 1970-01-01
    • 2013-07-09
    • 2020-03-18
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多