【问题标题】:Why is the evaluation of Mahout Recommender Systems with Movielens dataset so slow?为什么使用 Movielens 数据集对 Mahout 推荐系统的评估如此缓慢?
【发布时间】:2015-09-10 19:46:54
【问题描述】:

我在 mahout 中编写了一个简单的用户-用户推荐器和评估代码。

推荐器工作正常,但是一旦我添加了评估部分,就需要永远从 Eclipse 中的“Movielens1m”数据集中获得结果

正常吗?需要多长时间?评估在 Movielens 100K 数据集上运行良好。几秒钟后,我得到了评估结果 (0.923..)。

这是我的代码:

public class RecommenderEvaluator {

    public static void main(String[] args) throws Exception {

        //RandomUtils.useTestSeed();
        DataModel model = new FileDataModel(new File("data/movies1m.csv"));
        AverageAbsoluteDifferenceRecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator();

        RecommenderBuilder builder = new RecommenderBuilder() {
            @Override
            public Recommender buildRecommender(DataModel model) throws TasteException {

                UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
                UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,similarity, model);
                return new GenericUserBasedRecommender(model, neighborhood, similarity);
            }
        };
        double score = evaluator.evaluate(builder, null, model, 0.9, 1.0);
        System.out.println(score);

    }

}

【问题讨论】:

    标签: mahout evaluation recommendation-engine mahout-recommender collaborative-filtering


    【解决方案1】:

    您正在使用用户-用户协同过滤算法。 U-U 将每个用户与每个其他用户进行比较并存储相似度值,以便稍后您可以选择 N 个最近的邻居并使用他们的评分进行预测或推荐。当用户更改评分时,您必须重新计算整个模型,因为可能很多社区都会发生变化。用户-用户 CF 的一大好处是可以查看谁的评级构成了某个预测,并且您可以将其作为推荐解释的一部分向用户展示。然而,它的计算成本导致大多数从业者不久前转向了项目-项目协同过滤或矩阵分解(例如,SVD)。

    当您的用户多于项目时,项目-项目协同过滤是最好的。在这里,您必须计算所有项目与所有其他项目的相似度。但由于用户多于项目,项目的评分分布往往会缓慢变化(除非项目是系统中的新项目),因此您不必经常重新计算。

    尝试不同的算法并测量所有算法的构建和测试时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多