Как я могу проверить свой рекомендатель на mahout только с частью данных, скажем:
user_id, item_id, feature
1, 1, 1
1, 2, 0
1, 3, 1
2, 1, 1
2, 2, 0
И я хочу получить точность, проверяя только записи с функцией = 1.
Я использую GenericRecommenderIRStatsEvaluator
-
RecommenderIRStatsEvaluator evaluator =
new GenericRecommenderIRStatsEvaluator();
IRStatistics stats = evaluator.evaluate(
recommenderBuilder, modelBuilder, model, null, 10,
GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,
1.0);
System.out.println(stats.getPrecision())
Как я могу это сделать?
Я не уверен, есть ли автоматизированный способ сделать это, но если вы хотите сделать это вручную
Чтобы вычислить точность, вам нужно вычислить истинные положительные значения TP и ложные срабатывания FP.
То есть истинными позициями TP являются правильные ответы (feature = 1)
ложные срабатывания - это неправильные ответы, полученные вашим рекомендателем (на основе моего понимания является функция = 0)
И для вычисления точности вы вычисляете P = TP/(TP + FP); Так вы можете вычислить точность вручную
Если вы хотите разделить свои данные на тесты и обучение и рассчитать среднюю абсолютную разницу, обратитесь к классу RecommendedenderEvaluator в Mahout.
Также я ответил на ваш вопрос, чтобы получить точность и вспомнить значения в другом потоке. Однако я не считаю, что точность и ценность отзыва будут сильными показателями производительности.