Mahout推荐人评估 - 如何使用固定测试集

时间:2014-11-10 22:22:08

标签: testing dataset mahout mahout-recommender evaluator

我正在使用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());

1 个答案:

答案 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计算所有查询的精度。新方法使用搜索引擎进行查询,因此您还可以使用可伸缩的服务。