1

나는 K-Nearest Neighbor 알고리즘에서 Cosine Similarity를 ​​사용하여 사용자 기본 설정을 기반으로 권장 사항을 생성하는 것을 보았습니다. 이 모델에서 주어진 제품에 대한 사용자 등급은 벡터로 취급되며 두 사용자 간의 유사성은 두 벡터 간의 코사인 유사성에 의해 결정됩니다. 사람이 병렬 사용자 환경 설정에 대한 코사인 유사성 계정을 사용하는 방법을 추천 엔진을 설명 할 수 : (예를 들어 http://www.neo4j.org/graphgist?8173017)코사인 유사성 - 권장 사항 엔진의 단점?

내 질문이 무엇입니까? 2 명의 사용자가 완전히 극지방 선호도 설정을 가질 수 있지만 평행 (그러나 다른) 선호도를 갖는 경우 코사인 유사도 1을 생성 할 수 있습니다. 예를 들어 한 사용자가 5 개의 영화를 10 개의 별 중 1 개로 평가하고 다른 사용자가 동일한 5 개의 영화를 10 개의 별 중 10 개로 평가하면 Cosine Similarity는 1이됩니다 (내 생각에 정확하지 않은 것 같습니다) 사용자 유사성 측정). 문제의

cosine similarity

예 :

: 우리는 두 사용자의 사용자 환경을 측정하고, 우리는 3 개 제품에 대한 자신의 선호도를 측정하는 경우 , 우리는 두 벡터로 자신의 환경 설정을 저장할 수 있습니다 a = (1,1,1) 및 b = (10,10,10)

그러면 코사인 유사성을 사용하여 서로 얼마나 유사한 지 측정 할 수 있습니다. 그러나이 경우 코사인 유사성은 극성 반대 사용자 선호도를 나타내지 만 1이됩니다.

답변

3

이것은 바닐라 코사인 유사성이 중요하다는 것을 알고 있습니다. 다른 사용자 간의 등급 척도 차이는 고려하지 않았습니다.

조정 된 코사인 유사성은 각 공동 평가 쌍에서 해당 사용자 평균을 뺀 값으로 이러한 단점을 상쇄합니다. 형식적으로, 이러한 방식을 사용하여 아이템 i와 j 사이의 유사도는 U 번째 사용자의 등급의 평균 여기 enter image description here

R¯u입니다 주어진다. 당신의 예에서

는 전처리 한 후, A와 B는 모두 사용자가 지속적으로 모든 항목에 동일한 점수를 평가할 경우

(0,0,0). // We cannot calculate the cosine similarity since the normalizer is 0. 

이 현실에서 드문는 (또한,이 중 하나를 이해하는 데 기여하지 않는다된다 사용자 또는 항목).

각 사용자의 선호도 벡터에 하나의 다른 선호도 점수를 추가하여 유사도를 계산할 수 있다고 가정합니다. 마찬가지로

a = (1,1,1,2) 
b = (10,10,10,8) 
a1 = (1,2,2,1) // a user that has similar preference to a 
b1 = (9,8,9,10) // another user that has similar preference to b 
norm_a = a - mean(a) = [-0.25000 -0.25000 -0.25000 0.75000] 
norm_b = b - mean(b) = [0.50000 0.50000 0.50000 -1.50000] 
norm_a1 = [-0.50000 0.50000 0.50000 -0.50000] 
norm_b1 = [0 -1 0 1] 

sim(a,b) = norm_a*norm_b/(sqrt(sum(norm_a.^2)) * sqrt(sum(norm_b.^2))) = -1 

는 :

sim(a,a1) = 0.866 
sim(b,b1) = -0.82 
+0

이것이 바로 내가 찾던 설명, 감사를 많이했다. 숫자를 실행할 때 같은 값을 얻지는 않습니다 ... sim (a, b)에 대해서는 -1의 유사성을 얻습니다. 마찬가지로 sim (a, a1)에 대해서도 유사점은 -.58입니다. – Myclamm