Система рекомендаций для приложения книжного магазина - PullRequest
3 голосов
/ 26 февраля 2011

Привет, я пытаюсь изучить некоторые рекомендательные алгоритмы, которые используются на таких сайтах, как Amazon.com. Итак, у меня есть простое приложение книжного магазина java (spring hibernate postgres), где в Book есть атрибуты title, category, tags, author. Для простоты в книге нет контента. Книга должна быть идентифицирована по названию, категории, автору и тегам. Для каждого пользователя, входящего в приложение, я могу рекомендовать несколько книг. Каждый пользователь может просмотреть книгу, добавить ее в корзину и купить в любое время. Поэтому в базе данных я храню информацию о том, сколько раз каждый пользователь просматривал книгу, книги в своей корзине и книги, которые пользователь купил. На данный момент нет опции рейтинга, но она также может быть добавлена.

Так может кто-нибудь сказать мне, какие алгоритмы я мог бы использовать, чтобы продемонстрировать некоторые рекомендации книг для каждого пользователя? Я хочу, чтобы все было очень просто. Это не проект для продажи, а только для расширения моих знаний об алгоритмах рекомендаций. Итак, предположим, что всего около 30 книг (5 категорий и 6 книг в каждой). Было бы очень полезно, если бы кто-то также сказал мне, какими должны быть атрибуты, которые я должен использовать для вычисления сходства между двумя пользователями, и как это сделать с рекомендованными алгоритмами.

Спасибо заранее. SerotoninChase.

Ответы [ 4 ]

2 голосов
/ 26 февраля 2011

Вы можете найти всю информацию и библиотеку реализации (Taste framework) общих алгоритмов на здесь .

Коллективный разум в действии - это еще одна книга, которую я могу предложить в дополнение к тому, что предложил другой плакат

1 голос
/ 14 марта 2011

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

1 голос
/ 26 февраля 2011

В качестве конкретного конкретного примера, одним из вариантов является алгоритм «ближайших соседей K».

Чтобы упростить задачу, представьте, что у вас всего десять книг, и вы только отслеживали, сколько раз каждый пользователь просматривал каждую книгу,Тогда для каждого пользователя у вас может быть массив int timesViewed[10], где значение timesViewed[i] - это количество раз, которое пользователь просматривал номер книги i.

. Затем вы можете сравнить пользователя свсе остальные пользователи используют функцию корреляции, например, корреляция Пирсона .Вычисление корреляции между текущим пользователем c и другим пользователем o дает значение в диапазоне от -1,0 до 1,0, где -1,0 означает «этот пользователь c является полной противоположностью другого пользователя o», а 1,0означает «этот пользователь c такой же, как другой пользователь o».

Если вы вычислите корреляцию между c и любым другим пользователем, вы получите список результатов того, насколько похож пользовательшаблон просмотра для каждого другого пользователя.Затем вы выбираете K (например, 5, 10, 20) наиболее похожие результаты (отсюда и название алгоритма), то есть K пользователей с показателями корреляции, ближайшими к 1,0.

СейчасВы можете получить средневзвешенное значение для каждого из timesViewed массивов этих пользователей.Например, мы скажем, что averageTimesViewed[0] - это среднее значение timesViewed[0] для каждого из этих K пользователей, взвешенное по их показателю корреляции.Затем сделайте то же самое для друг друга averageTimesViewed[i].

Теперь у вас есть массив averageTimesViewed, который содержит, грубо говоря, среднее число раз, когда K пользователей с наиболее похожими шаблонами просмотра имеют cпросмотрел каждую книгу.Порекомендуйте книгу, которая имеет самый высокий балл averageTimesViewed, так как это книга, к которой другие пользователи проявили наибольший интерес.

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

Также обратите внимание, что это может быть тривиально расширено для учета других данных (таких как списки корзины и т. д.).Кроме того, вы можете выбрать всех пользователей, если хотите (то есть K = количество пользователей), но это не всегда дает значимые результаты, и обычно достаточно небольшого K достаточно для хорошегорезультаты и быстрее вычислить.

1 голос
/ 26 февраля 2011

Читать "Программирование Коллективного Разума". Это даст вам вкус и многое другое.

...