0

我使用 RecommenderEvaluator 来估计 Mahout 的推荐效率。目前,我尝试使用 IDRescorer 改进推荐结果,这将对搜索的项目进行一些后处理提升。

RecommenderEvaluator evaluator = 
    new AverageAbsoluteDifferenceRecommenderEvaluator();
double evaluation = evaluator.evaluate(builder, myModel, 0.9, 0.9);

Mahout 有什么方法可以告诉 RecommenderEvaluator 使用我的自定义 IDRescorer?

4

1 回答 1

1

您可以创建自己的Recommender类的实现

class CustomRecommender implements Recommender{
....
public List<RecommendedItem> recommend(long userID, int howMany) throws TasteException {
 IDRescorer rescorer = new CustomResorer();
 return delegate.recommend(userID, howMany, rescorer);
 }
 public List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException {
    return delegate.recommend(userID, howMany, rescorer);
 }
 public float estimatePreference(long userID, long itemID) throws TasteException {
   IDRescorer rescorer = new CustomResorer();
   return (float) rescorer.rescore( itemID, delegate.estimatePreference(userID, itemID));
 }
...
}

在这里,即使在没有 rescorer 的情况下调用推荐,您也会将其合并到recommendandestimatePreference方法中。

然后,当您构建时,RecommenderBuilder您将创建推荐器的实例:

RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
   @Override
   public Recommender buildRecommender(DataModel model) throws TasteException {
    Similarity similarity = new ...             
    return new CustomRecommender(model, similarity);                    
   }

};
于 2014-06-25T09:28:06.807 回答