https://www.fun-coding.org/recommend_basic3.html
3. 유사도(Similarity) 계산 방식
3.1. 평균제곱차이 유사도 (Mean Squared Difference Similarity)
3.2. 코사인 유사도 (Cosine Similarity)
3.3. 피어슨 유사도 (Pearson Similarity)
3.1. 평균제곱차이 유사도 (Mean Squared Difference Similarity)
Mean Squared Difference
- User-based Collaborative Filter 경우: 사용자 uu와 사용자 vv간의 msd 사용자 uu와 사용자 vv가 평가한 상품들의 평점간의 차의 제곱 / 사용자 uu와 사용자 vv가 모두 평가한 상품들의 수
msd(u,v)=1|Iuv|⋅∑i∈Iuv(rui−rvi)2msd(u,v)=1|Iuv|⋅∑i∈Iuv(rui−rvi)2
- IuvIuv는 사용자 uu와 사용자 vv 모두에 의해 평가된 상품의 집합
- |Iuv||Iuv|는 사용자 uu와 사용자 vv 모두에 의해 평가된 상품의 수
- Item-based Collaborative Filter 경우: 상품 ii와 상품 jj간의 msd
msd(i,j)=1|Uij|⋅∑u∈Uij(rui−ruj)2msd(i,j)=1|Uij|⋅∑u∈Uij(rui−ruj)2
위 식에서 UijUij는 상품 ii와 상품 jj 모두를 평가한 사용자의 집합이고 |Uij||Uij|는 상품 ii와 상품 jj 모두를 평가한 사용자의 수
Mean Squared Difference Similarity
- Mean Squared Difference (msd) 의 역수로 계산
- 차이가 클 수록 Similarity 값은 작아진다!
- Mean Squared Difference Similarity 식에서는 MSD가 0이 되는 경우를 대응하기 위해 1을 무조건 더해줌
msd_sim(u,v)msd_sim(i,j)=1msd(u,v)+1=1msd(i,j)+1msd_sim(u,v)=1msd(u,v)+1msd_sim(i,j)=1msd(i,j)+1
</p>
In [15]:
def sim_msd(data, name1, name2): sum = 0 count = 0 for movies in data[name1]: if movies in data[name2]: #같은 영화를 봤다면 sum += pow(data[name1][movies]- data[name2][movies], 2) count += 1 return 1 / ( 1 + (sum / count) )
In [16]:
sim_msd(ratings, 'Dave','Alex')
Out[16]:
0.2857142857142857
Dave와 Andy의 msd 유사도 구하기
In [17]:
sim_msd(ratings, 'Dave','Andy')
Out[17]:
0.15
3.2. 코사인 유사도 (Cosine Similarity)
코사인 유사도(Cosine Similarity)는 두 특성 벡터간의 유사 정도를 코사인 값으로 표현한 것임
Cosine Similarity는 −1에서 1까지의 값을 가지며, −1은 서로 완전히 반대되는 경우, 0은 서로 독립적인 경우, 1은 서로 완전히 같은 경우를 의미함
x⋅y=|x||y|cosθx⋅y=|x||y|cosθ
cosθ=x⋅y|x||y|
'07.AI' 카테고리의 다른 글
트랜스코더 (0) | 2020.08.11 |
---|---|
자연어처리 (NLP) - BERT (0) | 2020.08.04 |
딥러닝 - RNN (순환신경망, Recurrent Neural Network) (0) | 2020.07.16 |
머신러닝 - 강화학습 - 멀티 에이전트 강화학습(MARL) (0) | 2020.07.16 |
딥러닝 - DNN (Deep Neural Network) (0) | 2020.07.13 |