mahout过滤推荐结果 Recommender.recommend(long userID, int howMany, IDRescorer rescorer)

来源:互联网 发布:linux 设置启动内核 编辑:程序博客网 时间:2024/06/05 07:53
Recommender.recommend(uid, RECOMMENDER_NUM, rescorer);
Recommender.recommend(long userID, int howMany, IDRescorer rescorer): 获得推荐结果,给userID推荐howMany个Item,凡rescorer中包含的Item都过滤掉。

其中源码中调用了以下方法 TopItems.getTopItems

TopItems类的.getTopItems

public static List<RecommendedItem> getTopItems(int howMany,                                                  LongPrimitiveIterator possibleItemIDs,                                                  IDRescorer rescorer,                                                  Estimator<Long> estimator) throws TasteException {    Preconditions.checkArgument(possibleItemIDs != null, "argument is null");    Preconditions.checkArgument(estimator != null, "argument is null");    Queue<RecommendedItem> topItems = new PriorityQueue<RecommendedItem>(howMany + 1,      Collections.reverseOrder(ByValueRecommendedItemComparator.getInstance()));    boolean full = false;    double lowestTopValue = Double.NEGATIVE_INFINITY;    while (possibleItemIDs.hasNext()) {      long itemID = possibleItemIDs.next();      if (rescorer == null || !rescorer.isFiltered(itemID)) {        double preference;        try {          preference = estimator.estimate(itemID);        } catch (NoSuchItemException nsie) {          continue;        }        double rescoredPref = rescorer == null ? preference : rescorer.rescore(itemID, preference);        if (!Double.isNaN(rescoredPref) && (!full || rescoredPref > lowestTopValue)) {          topItems.add(new GenericRecommendedItem(itemID, (float) rescoredPref));          if (full) {            topItems.poll();          } else if (topItems.size() > howMany) {            full = true;            topItems.poll();          }          lowestTopValue = topItems.peek().getValue();        }      }    }    int size = topItems.size();    if (size == 0) {      return Collections.emptyList();    }    List<RecommendedItem> result = Lists.newArrayListWithCapacity(size);    result.addAll(topItems);    Collections.sort(result, ByValueRecommendedItemComparator.getInstance());    return result;  }



recommend(long userID, int howMany): 获得推荐结果,给userID推荐howMany个Item

estimatePreference(long userID, long itemID): 当打分为空,估计用户对物品的打分
setPreference(long userID, long itemID, float value): 赋值用户,物品,打分
removePreference(long userID, long itemID): 删除用户对物品的打分
getDataModel(): 提取推荐数据
0 0
原创粉丝点击