2013-09-27 42 views
0

好吧,我是Mahout和java的新手。我试着评估一个推荐器,下面的代码返回0.0 EVERY TIME,无论我使用的是距离度量还是簇大小。显然,它根本不会分裂培训和测试数据,我不知道为什么。Mahout - Recommender Evaluator返回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); 
    } 
} 

谢谢!

回答

-1

从象夫文档,

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,双,双)

评估()返回: 表示推荐人的估计偏好与实际值相匹配程度的“分数”;较低的分数意味着一个更好的匹配和0是一个完美的匹配

我想你没事。

3

我相信这是因为您在buildRecommender方法中将模型作为参数传递。你必须通过数据模型喜欢的东西PearsonCorrelation,NearestNeighborClusterSimilarity等

如果你不这样做,你最终评估上包含所有的喜好意味着其将尝试估计数据模型时,该方法中使用的数据模型首选项,找到它已经存在,并返回值。所以你将始终有完美的建议,因为DataModel模型已经知道了偏好。