【问题标题】:Mahout - Item exists in test data but not training dataMahout - 项目存在于测试数据中,但不存在于训练数据中
【发布时间】:2013-08-09 13:34:06
【问题描述】:

我正在尝试使用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,但我收到了相同的信息通知。我也尝试过使用RandomUtils.useTestSeed();. 当我使用UserSimilarity 指标运行相同时,我没有这个问题。

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

谢谢。 德拉甘

【问题讨论】:

    标签: mahout recommendation-engine mahout-recommender


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2021-03-14
      • 2020-02-22
      • 1970-01-01
      • 2021-02-28
      • 2018-03-07
      • 2014-06-12
      • 2020-06-01
      • 1970-01-01
      相关资源
      最近更新 更多