В качестве конкретного конкретного примера, одним из вариантов является алгоритм «ближайших соседей 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
достаточно для хорошегорезультаты и быстрее вычислить.