我已经用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);
}
}发布于 2015-07-30 23:40:33
您正在使用用户-用户协作过滤算法。U-U将每个用户与每个其他用户进行比较,并存储相似性值,以便以后您可以选择N个最近的邻居,并使用它们的评级进行预测或推荐。当用户更改评级时,您必须重新计算整个模型,因为许多邻居可能会发生变化。对于用户-用户CF来说,一个很大的好处是可以看到谁的评分构成了某个预测,你可以潜在地向用户展示这一点,作为推荐解释的一部分。然而,它的计算成本导致大多数从业者在一段时间前转到项目-项目协作过滤或矩阵分解(例如,SVD)。
当用户比项目多得多时,项目-项目协作过滤是最好的。在这里,您必须计算所有项目与所有其他项目的相似度。但由于用户比项目多得多,项目的评分分布往往变化很慢(除非项目是系统中的新项目),因此您不必经常重新计算。
尝试不同的算法,并测量所有算法的构建和测试时间。
https://stackoverflow.com/questions/31029413
复制相似问题