2017-12-29 24 views
1

私は回帰の目的で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 2 に興味がある:

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

ここで私はRMSE、MSE、MAE、R²を得ることができますが、データを一度にすべて計算できるようには見えません。サンプルコードで必要と示唆しているように、そうするために。

どのようにしてシングルパス計算を行うことができますか?

MAPEとQ²がありません。計算したものを、理想的には4つの計算中に得るにはどうしたらいいですか?

よろしく

答えて

0

RegressionEvaluatorのソースコードを見ると、私はそれがでさらに見て、今MultivariateStatisticalSummary

の使用を介して、一度にすべての統計情報を計算RegressionMetricsオブジェクトを作成することで実装されていることを発見Q²は検証セット上のR2だけであることを理解できました。元のコードは私をカバーしてくれました。

しかしMAPEため、MultivariateStatisticalSummaryに与えられた2つの用語は十分ではありませんでしたので、私はこのような新しいものを追加する必要がありました:

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

をそしてMAPEはちょうどこのです:

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

だから今私は必要なすべてのメトリックを持っています。それはMultivariateStatisticalSummaryを使用しているため、データセットが1回しか処理されないと確信しています。

関連する問題