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


    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(): 提取推荐数据

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Django render与redirect的区别
    前段(一)html基础标签
    mysql数据库多表查询及函数运算符(二)
    前段(四) JS部分
    Cookie、Session、Token、JWT总结
    前段(三)css完整部分
    django杂项 (二)
    Python框架Tornado基础(一)
    Django基础(一)
    博客园美化css/JS代码
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751595.html
Copyright © 2020-2023  润新知