我正在尝试使用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
或评估者做些什么。我已尝试同时使用RMSRecommenderEvaluator
和AverageAbsoluteDifferenceRecommenderEvaluator
,但我收到了相同的INFO通知。我也试过使用RandomUtils.useTestSeed();.
当我使用UserSimilarity
指标运行相同时,我没有这个问题。
我的问题是这会影响我的评估结果吗?
谢谢。 德拉甘
答案 0 :(得分:1)
基本上,由于评估发生的方式,您会看到Item exists in test data but not training data
消息。数据分为2,训练集和测试集。在训练数据上训练推荐者,然后根据测试集验证结果。这种划分为训练和测试的分区是随机完成的,所以是的,有些项目可能在训练集中而不在测试集中,反之亦然。对于更重要的结果,您应该运行测试大约3次或更多次并平均结果。
理想情况下,您不会在生产评估代码中使用RandomUtils.useTestSeed();
,它主要用于测试目的,因为每次运行测试时将随机种子设置为相同,因此您可以获得可重复性(适用于测试内部评估员代码)
此外,knn推荐器在Mahout 0.8(最近发布)中已弃用,将在0.9中删除