1

Я работаю над товарным CF, который использует скорректированное сходство косинусов. Недавно я добавил регулярное сходство с косинусом, и у меня были совершенно разные результаты. Теперь мой вопрос, который лучше подходит для моих данных?Выбор между скорректированным положением косинуса по сравнению с обычным косинусным подобием

Это возможный сценарий пользователей, элементы и рейтинги

  User 1 | User 2 | User 3 | User 4 | User 5 
Item 1 | 5 | 1 | 1 | 5 | 5 
Item 2 | 5 | 1 | 2 | 4 | 5 
Item 3 | 1 | 5 | 4 | 2 | 3 

Учитывая эти данные, вы бы к выводу, что пункт 1 и пункт 2 являются относительно «похожи». Вот результаты различных коэффициентов подобия:

Сходство между пунктом 1 и пунктом 2
Adjusted cosine similarity = 0.865
Regular cosine similarity = 0.987
я округлил их для этого примера

Вы можете увидеть это в основном то же самое , но когда вы пытаетесь вычислить сходство между пунктами 2 и 3 (которые вообще не похожи), это приводит к совершенно другим результатам:

Сходство между пунктом 2 a й Пункт 3
Adjusted cosine similarity = -0.955
Regular cosine similarity = 0.656
я округлил их для этого примера

Какой из них будет 'лучше'? Я предполагаю, что использование скорректированного косинусного сходства улучшается, так как оно учитывает средний рейтинг пользователя, но почему правильное сходство с косинусом приводит к положительному числу для таких «разных» предметов? Должен ли я просто воздерживаться от использования обычного сходства косинусов вообще или только для определенных сценариев?

Любая помощь будет оценена!

ответ

1

Почему правильное сходство с косинусом приводит к положительному числу для таких «разных» предметов?

Как уже упоминалось в примере, Adjusted Cosine Similarity отражает различия лучше, чем Regular Cosine Similarity при определенных обстоятельствах.

Regular Cosine Similarity по определению отражает различия в направлении, но не местоположении.

enter image description here

dist(A,B) является Euclidean Distance между А и В. Очевидно, что косинус сходство будет оставаться таким же, если любой вектор проходит в своем направлении.

Предположим, что пользователь дает оценки в 0 ~ 5 до двух фильмов.

from scipy import spatial 
import numpy as np 
a = np.array([2.0,1.0]) 
b = np.array([5.0,3.0]) 
1 - spatial.distance.cosine(a,b) 
#---------------------- 
# 0.99705448550158149 
#---------------------- 
c = np.array([5.0,4.0]) 
1 - spatial.distance.cosine(c,b) 
#---------------------- 
# 0.99099243041032326 
#---------------------- 

enter image description here

Наглядно мы бы сказали, пользователь b и c имеют схожие вкусы, и a довольно сильно отличается от них. Но правильное сходство с косинусом говорит нам неправильную историю.

Вычислим Adjusted Cosine Similarity, первый минус среднее x и y

mean_ab = sum(sum(a,b))/4 
# mean_ab : 3.5 
# adjusted vectors : [-1.5, -2.5] , [1.5, -0.5] 
1 - spatial.distance.cosine(a - mean_ab, b - mean_ab) 
#---------------------- 
# -0.21693045781865616 
#---------------------- 
mean_cb = sum(sum(c,b))/4 
# mean_cb : 6.5 
# adjusted vectors : [-1.5, -3.5] , [-1.5, -2.5] 
1 - spatial.distance.cosine(c - mean_cb, b - mean_cb) 
#---------------------- 
# 0.99083016804429891 
#---------------------- 

Это видно, настройка имеет смысл.

Должен ли я просто воздерживаться от использования обычного сходства косинусов вообще или только для определенных сценариев?

Если у вас возникли проблемы, используйте подходящий.

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

Смежные вопросы