товара на основе Collaborative Filtering
Первоначальная рекомендация товара на основе является полностью на основе пользовательского пункта рейтинга (например, пользователь оценили фильм с 3 звезды, или пользователь «любит» видео) , Когда вы вычисляете сходство между элементами, вы не должны знать ничего, кроме истории рейтингов всех пользователей. Таким образом, сходство между элементами вычисляется на основе рейтингов вместо метаданных содержимого элемента.
Позвольте привести пример. Предположим, у вас есть только доступ к некоторым данным рейтинга, как показано ниже:
user 1 likes: movie, cooking
user 2 likes: movie, biking, hiking
user 3 likes: biking, cooking
user 4 likes: hiking
Предположим теперь вы хотите, чтобы сделать рекомендации для пользователя 4.
Сначала вы создаете инвертированный индекс для элементов, вы получите:
movie: user 1, user 2
cooking: user 1, user 3
biking: user 2, user 3
hiking: user 2, user 4
Поскольку это двоичный рейтинг (например, нет или нет), мы можем использовать меру подобия, например Jaccard Similarity, для вычисления подобия объекта.
|user1|
similarity(movie, cooking) = --------------- = 1/3
|user1,2,3|
В числителе пользователь1 является единственным элементом, который имеет кино и кулинария. В знаменателе объединение фильма и кулинарии имеет 3 разных пользователя (user1,2,3). |.|
здесь обозначают размер набора. Поэтому мы знаем, что сходство между фильмом и кулинарией в нашем случае составляет 1/3. Вы просто делаете то же самое для всех возможных пар предметов (i,j)
.
После того, как вы закончите с вычислением подобия для всех пар, скажем, вам нужно сделать рекомендацию для пользователя 4.
- Посмотрите на сходство в
similarity(hiking, x)
где х любые другие теги, вы, возможно, ,
Если вам необходимо сделать рекомендацию для пользователя 3, вы можете суммировать оценку подобия от каждого элемента в своем списке. Например,
score(movie) = Similarity(biking, movie) + Similarity(cooking, movie)
score(hiking) = Similarity(biking, hiking) + Similarity(cooking, hiking)
Content-Based Рекомендация
Точка содержания на основе является то, что мы должны знать содержание как пользователя, так и ст. Обычно вы создаете профиль пользователя и профиль элемента, используя содержимое разделяемого пространства атрибутов. Например, для фильма вы представляете его со звездами кино в нем и жанрами (например, с использованием двоичного кодирования). Для профиля пользователя вы можете сделать то же самое, основываясь на том, что пользователи любят некоторые кинозвезды/жанры и т. Д. Тогда сходство пользователя и элемента может быть вычислено, например, с помощью косинусного сходства.
Вот конкретный пример:
Пусть это наш пользовательский профиль (с использованием двоичного кодирования, 0 означает не-как, 1 означает, что, как), который содержит предпочтения пользователя на 5 звезд кино и 5 жанров кино:
Movie stars 0 - 4 Movie Genres
user 1: 0 0 0 1 1 1 1 1 0 0
user 2: 1 1 0 0 0 0 0 0 1 1
user 3: 0 0 0 1 1 1 1 1 1 0
Пусть это наш фильм-профиль:
Movie stars 0 - 4 Movie Genres
movie1: 0 0 0 0 1 1 1 0 0 0
movie2: 1 1 1 0 0 0 0 1 0 1
movie3: 0 0 1 0 1 1 0 1 0 1
чтобы вычислить, насколько хорошо фильм для пользователя, мы используем cosine similarity:
dot-product(user1, movie1)
similarity(user 1, movie1) = ---------------------------------
||user1|| x ||movie1||
0x0+0x0+0x0+1x0+1x1+1x1+1x1+1x0+0x0+0x0
= -----------------------------------------
sqrt(5) x sqrt(3)
= 3/(sqrt(5) x sqrt(3)) = 0.77460
Аналогично:
similarity(user 2, movie2) = 3/(sqrt(4) x sqrt(5)) = 0.67082
similarity(user 3, movie3) = 3/(sqrt(6) x sqrt(5)) = 0.54772
Если вы хотите, чтобы дать одну рекомендацию для пользователя i
, просто выбрать фильм j
, который имеет самый высокий similarity(i, j)
.
Надеюсь, это поможет.
спасибо за сообщение, и это настолько подробно. – cstur4
У Cooking 2 пользователей? –