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

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

我猜你没事

于 2013-12-13T09:48:19.610 回答