Подтвердить что ты не робот

Написание базового механизма рекомендаций

Я хочу написать базовый механизм рекомендаций, который будет принимать и хранить список числовых идентификаторов (которые относятся к книгам), сравнить их с другими пользователями с большим объемом идентичных идентификаторов и рекомендовать дополнительные книги на основе этих находок.

После немного Googling я нашел эту статью, в которой обсуждается реализация алгоритма Slope One, но, похоже, полагается на пользователей, оценивающих элементы, являющиеся в сравнении. В идеале я бы хотел достичь этого, не требуя от пользователей предоставления рейтингов. Я предполагаю, что если пользователь имеет эту книгу в своей коллекции, они ее любят.

Пока мне кажется, что я могу по умолчанию оценивать 10 для каждой книги, мне интересно, есть ли более эффективный алгоритм, который я мог бы использовать. В идеале я бы хотел рассчитать эти рекомендации "на лету" (избегая вычисления партии). Мы ценим любые предложения.

4b9b3361

Ответ 1

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

Но, как вы уже сказали, вам нужен какой-то рейтинг от пользователей для предметов. Но не думайте о рейтинге, как в 1-5 звездах, но больше похожи на двоичный выбор, например 0 (книга не читается) и 1 (чтение книги), или заинтересованы или не заинтересованы.

Затем используйте соответствующую меру , чтобы рассчитать разницу между всеми пользователями (и их наборами элементов) и самими собой, выберите наиболее похожих пользователей для себя (из кто бы ни был активным пользователем) и выбирайте их предметы, которые вы не оценили (или считали, выбор 0).

Я думаю, что в этом случае хорошей дистанционной мерой было бы расстояние в 1 норму, или иногда называемое Манхэттенским расстоянием. Но это тот момент, когда вам нужно поэкспериментировать с вашим набором данных, чтобы получить наилучшие результаты.

Приятная введение к этой теме - это статья Брезе и др., эмпирический анализ предсказательных алгоритмов совместной фильтрации. Доступно здесь (PDF). Для исследовательской работы это легко прочитать.

Ответ 2

алгоритм Apriori может дать вам рекомендации, основанные на том, какой набор элементов интересен для пользователя. Вы должны определить собственное понятие интересного набора, например. элементы, которые пользователь купил в одном заказе, элементы, которые пользователь когда-либо покупал, элементы, которые пользователь прокомментировал, элементы, которые пользователь подробно изучил.

Алгоритм Apriori требует пакетной обработки, но существуют улучшения, которые не требуют пакетной обработки. Это AprioriTid и AprioriHybrid (извините, ссылка не была).

Ответ 3

@ndg Это очень проницательно, и как кто-то, кто работает в этой области, я думаю, что вы правы в использовании того, что составляет рейтинговую систему ~ {0,1}. Большинство различий в рейтингах звезд - это всего лишь шум. Вы можете разрешить {0,1,2} с "любить его!" но снова пользователи не согласны в использовании таких кнопок, поэтому может быть полезно ограничить выбор. Hotpot позволяет пользователям иметь 10 супер-плюсов, которые сохраняют согласованность.

Мой совет - быть осторожным в живописи в слишком широких мазках. Другими словами, универсальный алгоритм прост, но вы упускаете возможность быть оппортунистическим.

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

Имейте в виду, что число норм зависит от размера числа кривых. И вы, возможно, захотите рассмотреть квазинорм, псевдонорма или даже не непрерывные нормы.

Я не вижу причин использовать норму Манхэттена, на самом деле я бы использовал графовые нормы для расчета расстояния между пользователями.