Mahout - 推荐评估员返回0.0

时间:2013-09-27 16:59:52

标签: java mahout mahout-recommender

好吧,我对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);
    }
}

谢谢!

2 个答案:

答案 0 :(得分:3)

我相信它是因为您将模型作为buildRecommender方法中的参数传递。在将DataModel传递给PearsonCorrelation,NearestNeighborClusterSimilarity等事物时,必须在该方法中使用dataModel。

如果您不这样做,您最终会对包含所有首选项的数据模型进行评估,这意味着它将尝试估计首选项,发现它已存在并返回该值。因此,您将始终拥有完美的推荐,因为DataModel模型已经知道了首选项。

答案 1 :(得分:-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()返回: “得分”表示推荐者的估计偏好与实际值的匹配程度;较低的分数意味着更好的匹配,0是完美的匹配

我猜你没事。