0

申し分なく、私はMahoutとJavaに非常に慣れていません。レコメンダーを評価しようとしていますが、以下のコードは、使用する距離測定やクラスター サイズに関係なく、毎回 0.0 を返します。明らかに、トレーニング データとテスト データがまったく分割されていません。その理由はわかりません。

このコードに関するヘルプは大歓迎です!

public class Example {
public static void main(String[] args) throws Exception {

 final DataModel model = new FileDataModel(new File("FILENAME")) ;
  RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator();
  RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
      @Override
      public Recommender buildRecommender(DataModel dataModel) throws TasteException {
          UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
          ClusterSimilarity clusterSimilarity = new NearestNeighborClusterSimilarity(similarity);
          TreeClusteringRecommender tree = new TreeClusteringRecommender(model, clusterSimilarity, 50);
          return tree;
      }
  } ;
double score = evaluator.evaluate(recommenderBuilder, null, model, .7, 1.0);
    System.out.println(score);
    }
}

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

4

2 に答える 2

3

buildRecommender メソッド内でモデルをパラメーターとして渡しているためだと思います。DataModel を PearsonCorrelation、NearestNeighborClusterSimilarity などに渡すときは、そのメソッド内で dataModel を使用する必要があります。

そうしないと、すべての設定を含むデータ モデルを評価することになります。つまり、設定を推定し、それが既に存在することを確認し、値を返します。したがって、DataModel モデルはすでに設定を知っているため、常に完璧な推奨事項が得られます。

于 2014-04-10T00:58:01.650 に答える
-1

mahout のドキュメントから、

https://builds.apache.org/job/Mahout-Quality/javadoc/org/apache/mahout/cf/taste/eval/RecommenderEvaluator.html#evaluate(org.apache.mahout.cf.taste.eval.RecommenderBuilder、 org.apache.mahout.cf.taste.eval.DataModelBuilder、org.apache.mahout.cf.taste.model.DataModel、double、double)

evaluate() 戻り値: Recommender の推定された好みが実際の値とどの程度一致しているかを表す「スコア」。低いスコアはより良い一致を意味し、0 は完全な一致を意味します

私はあなたが大丈夫だと思います。

于 2013-12-13T09:48:19.610 に答える