【问题标题】:How mahout's recommendation evaluator worksmahout 的推荐评估器的工作原理
【发布时间】:2013-12-27 02:47:08
【问题描述】:

谁能告诉我 mahout 的 RecommenderIRStatsEvaluator 是如何工作的?更具体地说,它如何随机分割训练和测试数据以及结果与哪些数据进行比较?根据我的理解,您需要某种理想/预期结果,您需要将其与推荐算法的实际结果进行比较以找出 TP 或 FP 从而计算精度或召回率。但看起来 mahout 提供的精确度/召回率分数没有理想/结果。

【问题讨论】:

    标签: mahout mahout-recommender


    【解决方案1】:

    使用您在RecommenderIRStatsEvaluator 类的evaluate 方法中提供的一些相关阈值将数据分成训练集和测试集。如果此值为null,则有计算它的方法(computeThreshold)。将数据拆分为训练和测试的类是GenericRelevantItemsDataSplitter。如果您查看代码,您可以看到首先每个用户的首选项根据值按降序排序,并且只有那些值大于relevanceThreshold 的值才被视为相关。另请注意,最多将at 放入此集合中。

    @Override
      public FastIDSet getRelevantItemsIDs(long userID,
                                           int at,
                                           double relevanceThreshold,
                                           DataModel dataModel) throws TasteException {
        PreferenceArray prefs = dataModel.getPreferencesFromUser(userID);
        FastIDSet relevantItemIDs = new FastIDSet(at);
        prefs.sortByValueReversed();
        for (int i = 0; i < prefs.length() && relevantItemIDs.size() < at; i++) {
          if (prefs.getValue(i) >= relevanceThreshold) {
            relevantItemIDs.add(prefs.getItemID(i));
          }
        }
        return relevantItemIDs;
      }
    

    您可以在RecommenderIRStatsEvaluator.evaluate 方法中看到如何计算精度和召回率。简而言之,它是这样的: 首先,一次只评估一个用户。他的偏好值分为相关(如上所述)和其他。相关的用作测试集,另一个与所有其他用户一起用作训练。然后为该用户生成top-at 推荐。接下来,该方法会查看作为测试集的一些项目是否出现在推荐中,以及有多少:

    int intersectionSize = 0;
          List<RecommendedItem> recommendedItems = recommender.recommend(userID, at, rescorer);
          for (RecommendedItem recommendedItem : recommendedItems) {
            if (relevantItemIDs.contains(recommendedItem.getItemID())) {
              intersectionSize++;
            }
      }
    

    精度比计算如下:

    (double) intersectionSize / (double) numRecommendedItems
    

    如果推荐者至少产生at 推荐,则numRecommendedItems 通常是您的at,否则更小。

    类似地,召回率计算如下:

    (double) intersectionSize / (double) numRelevantItems
    

    其中numRelevantItems 是该用户在测试集中的项目数。

    最终的准确率和召回率是所有用户的所有准确率和召回率的宏观平均值。

    希望这能回答你的问题。

    编辑:继续您的问题,在评估推荐系统的 IR 统计数据(精确度和召回率)时非常棘手,尤其是在每个用户的用户偏好数量很少的情况下。在这个book 中,您可以找到非常有用的见解。它说

    通常假设不喜欢的项目不会被 即使它们已被推荐,也喜欢它们,即它们对用户来说无趣或无用。然而,这可能不是真的,因为不喜欢的项目集可能包含一些用户没有选择的有趣项目。例如,用户可能不喜欢某个项目,因为他不知道它的存在,但是在推荐暴露了该项目之后,用户可以决定选择它。无论如何,在使用 IR 统计时,FP 的数量被高估了。

    【讨论】:

    • 非常感谢您的详细解释。我希望有一天我能报答你的帮助。
    • 我很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多