一次获得多个回归指标

时间:2017-12-29 13:29:25

标签: apache-spark

我正在使用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个呢?

问候

1 个答案:

答案 0 :(得分:0)

查看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,我确信数据集只处理一次。