1

我正在使用 Apache Mahout 编写推荐系统评估器,使用 train.csv 训练集和 Precision 指标。我的问题是:可以使用不是由评估者生成的固定测试集​​吗?

更具体地说,我有一个 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());
4

1 回答 1

0

所以你想要你拥有的交叉验证黄金标准测试数据。它分为训练和测试。您想要一个可重复的测试。这很有意义。

Mahout 评估器会根据您传入的测试和训练数据的随机选择为您进行拆分。如果您传入固定的 RNG 种子,评估器将选择完全相同的测试和训练集。这并不完全是您所要求的,但它是获得可重复 CV 测试的一种方法。

否则,您将需要破解 Evaluator 以使用您预先计算的测试/训练集。

我使用的精度指标是某些推荐数量的平均精度 (MAP),例如您将在 UI 中计算或显示的数字。这不是 Mahout Evaluator 内置的。

要做到这一切,你会破解 Evaluator。

顺便说一句,除非绝对简单是最高设计标准,否则我不会使用该推荐器。最新的 Mahout 推荐器构建使用 Solr 或 Elasticsearch 等搜索引擎查询的模型。这些都非常灵活和可扩展。

此处描述的新方法:http ://mahout.apache.org/users/recommender/intro-cooccurrence-spark.html 此处有关此方法的一些博客文章:http: //occamsmachete.com/ml/

使用这种方法,您将在 train.csv 上进行训练,并使用 test.csv 中的用户历史记录进行查询。使用 MAP 计算所有查询的精度。新方法使用搜索引擎进行查询,因此您还拥有可扩展的服务。

于 2014-11-11T17:27:18.017 回答