Оценка рекомендаций Mahout - как использовать фиксированный набор тестов

Я пишу рекомендательный системный оценщик с Apache Mahout, используя обучающий набор train.csv и метрику Precision. У меня вопрос: возможно ли использовать фиксированный набор тестов, не созданный оценщиком?

Если быть более точным, у меня есть файл test.csv, который содержит список идентификаторов пользователей, и для них я хочу предоставить рекомендации и оценить результаты с помощью метрики точности, только для этого фиксированного набора пользователей, который никогда не изменяется. Их рейтинги находятся в файле 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 ответ

Таким образом, вы хотите перекрестные проверки данных золотого стандарта, которые у вас есть. Он разбит на поезд и тест. Вы хотели бы повторить тест. Это имеет большой смысл.

Оценщик Mahout выполняет разделение для вас на основе случайного выбора тестовых и обучающих данных из того, что вы передаете. Если вы передадите фиксированное начальное значение ГСЧ, оценщик выберет точно такой же набор тестов и тренировок. Это не совсем то, что вы просили, но это один из способов получить повторяющиеся тесты CV.

В противном случае вам нужно будет взломать оценщик, чтобы использовать предварительно рассчитанные тестовые / тренировочные наборы.

Метрика точности, которую я использую, - это средняя средняя точность (MAP) при некотором количестве рекомендаций, например, число, которое вы будете вычислять или показывать в пользовательском интерфейсе. Это не встроено в 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. Новый метод использует поисковую систему для запросов, поэтому у вас также есть сервис, который можно масштабировать.

Другие вопросы по тегам