【问题标题】:Confusion using Mahout Recommender Evaluation使用 Mahout Recommender 评估的困惑
【发布时间】:2015-03-09 01:56:11
【问题描述】:

我有一个关于使用AverageAbsoluteDifferenceRecommenderEvaluator #evaluate 方法的问题。

使用GenericUserBasedRecommender

new RecommenderBuilder() {
@Override
public Recommender buildRecommender(DataModel model) throws TasteException {
UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(model);
UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(50, userSimilarity, model);
return new GenericUserBasedRecommender(model, userNeighborhood, userSimilarity);
    }
};

AverageAbsoluteDifferenceRecommenderEvaluator 在开始时间打印这个:

12:02:04.000 [pool-1-thread-1] INFO  org.apache.mahout.cf.taste.impl.eval.StatsCallable - Average time per recommendation: 127ms
12:02:04.000 [pool-1-thread-1] INFO  org.apache.mahout.cf.taste.impl.eval.StatsCallable - Approximate memory used: 826MB / 960MB

通过recommenderBuilder.buildRecommender(model).recommend(101, 10); 获得推荐 - 大约需要 186.091 毫秒 .. 这与 AverageAbsoluteDifferenceRecommenderEvaluator 每次推荐的平均时间差不多

现在,GenericItemBasedRecommender 发生以下情况:

new RecommenderBuilder() {
@Override
public Recommender buildRecommender(DataModel model) throws TasteException {
ItemSimilarity itemSimilarity = new PearsonCorrelationSimilarity(model);
return new GenericItemBasedRecommender(model, itemSimilarity);
    }
};

评估输出:

11:59:19.950 [main] INFO  o.a.m.c.t.i.eval.AbstractDifferenceRecommenderEvaluator - Starting timing of 63493 tasks in 8 threads
11:59:19.979 [pool-1-thread-1] INFO  org.apache.mahout.cf.taste.impl.eval.StatsCallable - Average time per recommendation: 26ms
11:59:19.979 [pool-1-thread-1] INFO  org.apache.mahout.cf.taste.impl.eval.StatsCallable - Approximate memory used: 598MB / 897MB

是的 .. 每次都像 26 毫秒

但实际上,使用此推荐器我必须等待很长时间才能得到答案 -

recommenderBuilder.buildRecommender(model).recommend(101, 10);

GenericItemBasedRecommender —> 49267.09 毫秒 .. 或有时更少 ...但永远不会低于 100 毫秒!!

我将 GroupLens 10M 数据与 GroupLensDataModel 一起使用,我使用 0.95 trainingPercentage 数据和 1.0 evaluationPercentage 进行评估

通过完整的评估百分比,我将确保创建的推荐考虑到所有项目......所以我可以将平均推荐时间与正常推荐进行比较

为什么将 GenericItemBasedRecommender 与 AverageAbsoluteDifferenceRecommenderEvaluator 结合使用,每次推荐的平均时间会如此短?但实际上使用#recommend方法并没有那么快

我不明白..希望有人能解决这个问题!谢谢!

【问题讨论】:

    标签: java mahout


    【解决方案1】:

    这可能是因为您有 10,000 个项目和 72,000 个用户(项目数量的 7 倍)。

    就性能而言,如果您使用该项目的用户少得多,您应该更喜欢 UBCF,否则应该选择 IBCF。

    显然,就推荐准确度而言,越快不一定是最好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 2010-10-01
      • 2012-11-29
      • 2014-04-26
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多