使用Mahout推荐评估的困惑

时间:2014-05-08 21:01:07

标签: java mahout

我对使用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 ms ..这几乎就像是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

是啊......每次都像是26ms

但事实上,使用这个推荐人我必须等待一段时间才能得到答案 -

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

GenericItemBasedRecommender - > 49267.09 ms ..或者有时候更少...但是永远不会超过100毫秒!!

我正在使用GroupLens 10M数据和GroupLensDataModel进行评估我正在使用0.95 trainingPercentage数据和1.0评估百分比

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

为什么通过使用带有AverageAbsoluteDifferenceRecommenderEvaluator的GenericItemBasedRecommender,每个建议的平均时间如此之少?但实际上使用#recommend

方法并不是那么快

我不明白..希望有人清楚这一点!!谢谢!

1 个答案:

答案 0 :(得分:0)

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

就性能而言,如果你的用户和IBCF的用户少得多,你应该更喜欢UBCF。

显然,就推荐准确性而言,它不一定是最好的。