我正在使用train.csv训练集和Precision度量标准,使用Apache Mahout编写推荐系统评估程序。我的问题是:可以使用不是由评估者生成的固定测试集吗?
更具体地说,我有一个test.csv文件,其中包含UserIds列表,对于这些我想提供建议并使用Precision度量评估结果,仅适用于永远不会更改的固定用户组。他们的评级在train.csv文件中,我用它来训练算法,它还包含所有其他用户的评级。
我还发布了我要添加此功能的代码:
RandomUtils.useTestSeed();
DataModel model = new FileDataModel(new File("files/train.csv"));
RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator();
RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
public Recommender buildRecommender(DataModel model) throws TasteException {
//Here I build my recommender system
//return ...
}
};
IRStatistics stats = evaluator.evaluate(recommenderBuilder, null, model, null, 5,
4/*relevance Threshold*/, 1);
System.out.println(stats.getPrecision());
答案 0 :(得分:0)
因此,您需要交叉验证金标准测试数据。它分为火车和测试。你想要一个可重复的测试。这很有道理。
Mahout评估员会根据您传入的测试和训练数据随机挑选您的分组。如果您传入固定的RNG种子,评估者将选择完全相同的测试和训练集。这并不是你所要求的,但这是获得可重复CV测试的一种方法。
否则,您需要破解评估者以使用预先计算的测试/训练集。
我使用的精度指标是某些推荐数的平均精度(MAP),例如您将在UI中计算或显示的数字。这不是Mahout评估员的内置。
要做到这一切,你就是黑客评估员。
除非绝对简单是最高的设计标准,否则我不会使用该推荐器。最新的Mahout推荐器构建了使用Solr或Elasticsearch等搜索引擎查询的模型。这些非常灵活且可扩展。此处描述的新方式:http://mahout.apache.org/users/recommender/intro-cooccurrence-spark.html 有关此方法的一些博客文章:http://occamsmachete.com/ml/
使用此方法,您可以在train.csv上进行训练,并使用test.csv中的用户历史记录进行查询。使用MAP计算所有查询的精度。新方法使用搜索引擎进行查询,因此您还可以使用可伸缩的服务。