我正在使用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²感兴趣 因此,我在这里查看了文档:
我看到我可以得到RMSE,MSE,MAE和R²但似乎我不能一次性计算它们,只扫描一次数据行而不是5次,因为示例代码会建议它需要这样做。
如何实现单次通过计算?
然后,有MAPE和Q²缺失,我怎样才能得到那些计算出来的,理想情况下计算其他4个呢?
问候
答案 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
,我确信数据集只处理一次。