Как проверить правильность алгоритма совместной фильтрации по пунктам? - PullRequest
3 голосов
/ 14 сентября 2011

Я только что создал алгоритм совместной фильтрации на основе элементов, который может принимать массив данных в форме [username]=>[item]=>[rating] и рекомендовать другие элементы на основе текущих элементов, которые пользователь оценил / купил, вычисляя прогноз рейтинга пользователь выдаст этот предмет, если будет использовать его, и оценит его.

Мой вопрос: как я могу проверить точность моей системы рекомендаций?

Ответы [ 4 ]

4 голосов
/ 14 сентября 2011

Выберите количество случайных пользователей и предметов, для которых у вас есть рейтинг, и попытайтесь предсказать рейтинг, используя ваш алгоритм.Вычислите RMSE между вашим прогнозом и фактическим рейтингом.Чем ниже значение, тем лучше.

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

Интересное чтение: Премия Netflix

3 голосов
/ 21 октября 2011

Библиотека, подобная Apache Mahout, предоставляет платформу для автоматического выполнения этой работы.

Но позвольте мне предположить, что вы хотите написать собственное решение.

Как правило, вы проверяете точность с помощью перекрестной проверки . Итак, возьмите набор данных рейтингов. Разделите его на два набора, один набор - обучающий набор, а другой набор - «тестовый набор». Обычно это делается путем случайного выбора, скажем, 80% пользователей и включения их в тренировочный тест и использования оставшихся 20% для набора тестов.

Один за другим выберите пользователей в наборе тестов. Чтобы проверить свою точность, вы можете использовать метрику «все, кроме одного»: скрыть один рейтинг от этого одного использования и попытаться предсказать его. (Некоторые авторы называют это «оставь один раз» вместо «все, кроме одного».) Используйте только обучающий набор и данные этого одного пользователя (за исключением, конечно, скрытого рейтинга) , Каждый раз, когда вы делаете это, вы получаете ошибку, вы можете просто суммировать их и делить на количество сделанных вами прогнозов. Это средняя средняя ошибка.

Конечно, есть и другие способы сделать это.

0 голосов
/ 04 сентября 2014

Мне нравится Root Mean Square Error, но еще одна, которая может помочь, называется 'Средняя средняя точность @ K' AKA 'MAPK'.

Часть MAPK «Средняя точность» - это просто уместностьЛучшие K рекомендаций.В общем, посмотрите, что ваша модель предсказывает в отношении рекомендаций, и посмотрите, сколько из них являются «хитами» в фактическом результирующем наборе (в данном случае фактический результирующий набор = набор элементов, за которые пользователи поставили оценку)

Этот пример дает хороший пример того, о чем я говорю: http://makarandtapaswi.wordpress.com/2012/07/02/intuition-behind-average-precision-and-map/

0 голосов
/ 12 октября 2011

Просто протестируйте в этой простой форме:

USER A - ITEM 1 - 10.0
USER A - ITEM 2 - 10.0
USER A - ITEM 3 - 10.0

USER B - ITEM 1 - 10.0
USER B - ITEM 2 - 10.0
USER B - ITEM 3 - 10.0

USER C - ITEM 1 - 10.0
USER C - ITEM 2 - 10.0

Теперь ПОЛЬЗОВАТЕЛЬ C должен получить рекомендацию 10.0 для ПУНКТА 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...