2016-06-22 16 views
1

spark RankingMetrics.meanAveragePrecisionを使用しようとしています。 しかし、期待通りに機能していないようです。SparkのRankingMetrics(Scala)

val t2 = (Array(0,0,0,0,1), Array(1,1,1,1,1)) 
val r = sc.parallelize(Seq(t2)) 
val rm = new RankingMetrics[Int](r) 
rm.meanAveragePrecision // Double = 0.2 
rm.precisionAt(5) // Double = 0.2 

t2は、左アレイが実際の値と右アレイの予測値を示しているタプルである - 我々はT2我々の平均精度を計算する場合(1関連文書を、0-非関連)

(0/1 + 0/2 + 0/3 + 0/4 + 1/5)/ 5 = 1/25 しかしMeanAveragePrecisionのRankingMetricは0.2です。これは1/25です。

ありがとうございました。

答えて

0

私は問題があなたの入力データだと思います。予測/実際のデータには関連性スコアが含まれているので、0/1スコアを使用して評価する場合は、メトリックをランク付けするのではなくbinary classification metricsを参照する必要があります。

RankingMetricsでは、ランク付けされたアイテムの2つのリスト/配列が代わりに必要であるため、スコアをドキュメントIDに置き換えると、期待どおりに機能するはずです。ここだけ第五項目に一致する2つのリストで、PySpark例である:

生産
from pyspark.mllib.evaluation import RankingMetrics 

rdd = sc.parallelize([(['a','b','c','d','z'], ['e','f','g','h','z'])]) 
metrics = RankingMetrics(rdd) 

for i in range(1, 6): 
    print i, metrics.precisionAt(i) 
print 'meanAveragePrecision', metrics.meanAveragePrecision 
print 'Mean precisionAt', sum([0, 0, 0, 0, 0.2])/5 

1 0.0 
2 0.0 
3 0.0 
4 0.0 
5 0.2 
meanAveragePrecision 0.04 
Mean precisionAt 0.04