为什么使用Movielens数据集评估Mahout推荐系统的速度如此之慢?

时间:2015-06-24 14:30:46

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

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

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

这是正常的吗?需要多长时间?评估在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);

    }

}

1 个答案:

答案 0 :(得分:0)

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

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

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