【问题标题】:Getting multiple regression metrics at once一次获取多个回归指标
【发布时间】:2018-02-28 22:53:12
【问题描述】:

我正在使用 ML 包进行回归分析,我的数据得到了很好的结果。 我现在正在尝试一次获取多个指标,就像现在一样,我正在按照此处示例的建议进行操作:https://spark.apache.org/docs/2.1.0/ml-classification-regression.html

示例中的代码基本上是这样的:

val  evaluator  =  new  RegressionEvaluator()
  .setLabelCol("label")
  .setPredictionCol("prediction")
  .setMetricName("rmse")
val  rmse  =  evaluator.evaluate(predictions)

这为我的测试数据提供了 RMSE,这很好,但我也对 MSE、MAE、MAPE、R² 和 Q² 感兴趣 因此,我在这里查看了文档:

https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/ml/evaluation/RegressionEvaluator.html#metricName%28%29

我看到我可以得到 RMSE、MSE、MAE 和 R²,但似乎我不能一次计算它们,只检查数据行一次而不是 5 次,因为示例代码会建议它需要这样做。

如何实现单次计算?

那么,缺少 MAPE 和 Q²,我怎样才能得到它们的计算结果,理想情况下同时计算其他 4 个?

问候

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    查看RegressionEvaluator 的源代码,我发现它是通过创建一个RegressionMetrics 对象来实现的,该对象通过使用MultivariateStatisticalSummary 一次计算所有统计信息

    现在,进一步查看文档,我能够理解 Q² 只是验证集上的 R²,所以原始代码让我明白了。

    但是对于 MAPE,给 MultivariateStatisticalSummary 的两个术语是不够的,所以我不得不像这样添加一个新的:

    if (observation != 0)
      math.abs(observation - prediction) / observation
    else
      0
    

    然后 MAPE 就是这样:

    def meanAbsolutePercentageError: Double = {
      summary.mean(2)
    }
    

    所以现在我拥有了我需要的所有指标,并且因为它使用 MultivariateStatisticalSummary,我确信数据集只被处理一次。

    【讨论】:

      猜你喜欢
      • 2023-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2015-04-28
      • 2020-09-18
      • 2015-02-10
      • 1970-01-01
      • 2015-09-07
      相关资源
      最近更新 更多