【问题标题】:Mahout RecommenderEvaluator with IDRescorerMahout RecommenderEvaluator 和 IDRescorer
【发布时间】:2014-06-24 10:57:08
【问题描述】:

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

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

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

【问题讨论】:

  • @DraganMilcevski 非常感谢您的回答。这不是我想要的,因为我的“CustomRescorer”取决于其他参数,例如“new CustomRescorer(requestParams: Seq[String])”。对于所有其他情况,您的答案可能是合适的。
  • 也有办法解决这个问题。您将在 Recommender 类中将 customRescorrer 作为变量,您甚至可以通过设置新值来刷新它,然后当推荐过程开始时,它将使用新的 rescorrer。也许如果你派全班,我可能会帮助你。

标签: mahout recommendation-engine mahout-recommender


【解决方案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));
 }
...
}

即使在没有重新评分器的情况下调用推荐,您也会将其合并到 recommendestimatePreference 方法中。

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

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

};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 2013-03-18
    • 2012-08-14
    • 1970-01-01
    • 2012-07-02
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多