【问题标题】:How to extract average metrics with Cross-Validation in PySpark如何在 PySpark 中使用交叉验证提取平均指标
【发布时间】:2018-08-03 03:23:22
【问题描述】:

我正在尝试在 Spark 1.6.0 中对随机森林执行交叉验证,但我发现很难获得评估指标(精度、召回率、f1 ...)。我想要所有折叠的指标的平均值。是否可以通过CrossValidatorMulticlassClassificationEvaluator 获得它们?

我只找到了稍后在独立测试数据集上执行评估并使用交叉验证中的最佳模型的示例。我不打算使用训练集和测试集,而是使用所有数据帧 (df) 进行交叉验证,让它进行拆分,然后取平均指标。

paramGrid = ParamGridBuilder().build()
evaluator = MulticlassClassificationEvaluator()    

crossval = CrossValidator(
    estimator=pipeline,
    estimatorParamMaps=paramGrid,
    evaluator=evaluator,
    numFolds=5)

model = crossval.fit(df)

evaluator.evaluate(model.transform(df))

目前,我使用上述代码的最后一行 evaluator.evaluate(model.transform(df)) 获得了最佳模型指标,但我并不完全确定自己做得是否正确。

【问题讨论】:

  • 我非常怀疑这是否可能——在 Spark 1.x 中,甚至无法获得最佳模型参数:stackoverflow.com/questions/31749593/…
  • 但在这种情况下,我说的是评估指标,而不是参数。真的没有办法吗?或者甚至是最好的模特?

标签: apache-spark pyspark


【解决方案1】:

在 Spark 2.x 中,可以使用 model.avgMetrics 获取平均指标。这将返回一个包含用于训练交叉验证模型的指标的双精度数组。

对于MulticlassClassificationEvaluator,这给出了一个数组:f1、weightedPrecision、weightedRecall、accuracy(如文档中的here)。可以根据需要使用评估器类中的 setter 覆盖这些指标。

如果你还需要得到交叉验证器选择的最佳模型参数,请看我在here的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多