Как работает оценщик рекомендаций mahout

Может ли кто-нибудь сказать мне, как работает RecommenderIRStatsEvaluator mahout? В частности, как он случайным образом разбивает данные обучения и тестирования и с какими данными сравнивается результат? Исходя из моего преуменьшения, вам нужен какой-то идеальный/ожидаемый результат, который вам нужно сравнить с фактическим результатом алгоритма рекомендации, чтобы узнать TP или FP и, таким образом, вычислить точность или отзыв. Но похоже, что mahout обеспечивает оценку точности/отзыва без этого идеала/результата.


person rusho1234    schedule 09.12.2013    source источник


Ответы (1)


Данные разбиваются на наборы для обучения и тестирования с использованием некоторого порогового значения релевантности, которое вы указываете в методе evaluate класса RecommenderIRStatsEvaluator. Если это значение равно null, существует метод, который его вычисляет (computeThreshold). Класс, который разбивает данные на обучение и тестирование, называется GenericRelevantItemsDataSplitter. Если вы посмотрите на код, вы увидите, что сначала настройки для каждого пользователя сортируются в соответствии со значением в порядке убывания, а затем только те, которые имеют значение больше relevanceThreshold, считаются релевантными. Также обратите внимание, что в этот набор помещается не более at.

@Override
  public FastIDSet getRelevantItemsIDs(long userID,
                                       int at,
                                       double relevanceThreshold,
                                       DataModel dataModel) throws TasteException {
    PreferenceArray prefs = dataModel.getPreferencesFromUser(userID);
    FastIDSet relevantItemIDs = new FastIDSet(at);
    prefs.sortByValueReversed();
    for (int i = 0; i < prefs.length() && relevantItemIDs.size() < at; i++) {
      if (prefs.getValue(i) >= relevanceThreshold) {
        relevantItemIDs.add(prefs.getItemID(i));
      }
    }
    return relevantItemIDs;
  }

Как вычисляются точность и отзыв, вы можете увидеть в методе RecommenderIRStatsEvaluator.evaluate. Вкратце это так: сначала оценивается только один пользователь. Его предпочтения делятся на релевантные (как описано выше) и прочие. Соответствующие из них используются в качестве тестового набора, а другие вместе со всеми другими пользователями в качестве обучающих. Затем для этого пользователя создается top-at рекомендаций. Затем метод проверяет, присутствуют ли в рекомендации некоторые из элементов, которые были исключены в качестве тестового набора, и сколько:

int intersectionSize = 0;
      List<RecommendedItem> recommendedItems = recommender.recommend(userID, at, rescorer);
      for (RecommendedItem recommendedItem : recommendedItems) {
        if (relevantItemIDs.contains(recommendedItem.getItemID())) {
          intersectionSize++;
        }
  }

Точность вычисляется следующим образом:

(double) intersectionSize / (double) numRecommendedItems

Где numRecommendedItems обычно – это at, если рекомендатель дает не менее at рекомендаций, в противном случае меньше.

Аналогично, отзыв рассчитывается следующим образом:

(double) intersectionSize / (double) numRelevantItems

где numRelevantItems — количество элементов в тестовом наборе для этого пользователя.

Окончательная точность и полнота — это макросреднее всех значений точности и полноты для всех пользователей.

Надеюсь, что это ответ на ваш вопрос.

EDIT: Чтобы продолжить ваш вопрос, очень сложно оценить IR-статистику (точность и отзыв) для рекомендательных систем, особенно если у вас есть небольшое количество пользовательских настроек на пользователя. В этой книге вы найдете очень полезную информацию. Он говорит, что

обычно предполагается, что не понравившиеся элементы не понравились бы, даже если бы они были рекомендованы, т. е. они неинтересны или бесполезны для пользователя. Однако это может быть не так, поскольку в наборе не понравившихся элементов могут быть интересные элементы, которые пользователь не выбрал. Например, пользователю может не понравиться элемент, потому что он не знал о его существовании, но после того, как рекомендация показала этот элемент, пользователь может выбрать его. В любом случае при использовании статистики IR количество FP завышено.

person Dragan Milcevski    schedule 11.12.2013
comment
Большое спасибо за ваше подробное объяснение. Я надеюсь, что когда-нибудь смогу отплатить за вашу помощь. - person rusho1234; 13.12.2013
comment
Я рад, что могу помочь. - person Dragan Milcevski; 13.12.2013