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