Mahout - 项目存在于测试数据中但不存在于训练数据中

时间:2013-08-09 13:34:06

标签: mahout recommendation-engine mahout-recommender

我正在尝试使用PearsonCorrelationSimilarity评估一个简单的基于项目的推荐器。 我从包含userid,itemid,preference,timestamp的文件中加载DataModel(按此顺序) 我的代码看起来像这样:

DataModel model = new FileDataModel(new File("FILE_NAME"));
RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator();

RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
                    @Override
                    public Recommender buildRecommender(DataModel model) throws TasteException {
                        ItemSimilarity similarity = new PearsonCorrelationSimilarity(model);
                        Optimizer optimizer = new ConjugateGradientOptimizer();
                        return new KnnItemBasedRecommender(model, similarity, optimizer, N);
                    }

                };
score = evaluator.evaluate(recommenderBuilder, null, model, 0.7, 1.0);

当我运行它时,我会得到很多的

INFO eval.AbstractDifferenceRecommenderEvaluator: Item exists in test data but not training data:

这是否必须对我的DataModel或评估者做些什么。我已尝试同时使用RMSRecommenderEvaluatorAverageAbsoluteDifferenceRecommenderEvaluator,但我收到了相同的INFO通知。我也试过使用RandomUtils.useTestSeed();. 当我使用UserSimilarity指标运行相同时,我没有这个问题。

我的问题是这会影响我的评估结果吗?

谢谢。 德拉甘

1 个答案:

答案 0 :(得分:1)

基本上,由于评估发生的方式,您会看到Item exists in test data but not training data消息。数据分为2,训练集和测试集。在训练数据上训练推荐者,然后根据测试集验证结果。这种划分为训练和测试的分区是随机完成的,所以是的,有些项目可能在训练集中而不在测试集中,反之亦然。对于更重要的结果,您应该运行测试大约3次或更多次并平均结果。

理想情况下,您不会在生产评估代码中使用RandomUtils.useTestSeed();,它主要用于测试目的,因为每次运行测试时将随机种子设置为相同,因此您可以获得可重复性(适用于测试内部评估员代码)

此外,knn推荐器在Mahout 0.8(最近发布)中已弃用,将在0.9中删除