koos808

코사인 유사도(cosine similarity) + python 코드 본문

Statistics

코사인 유사도(cosine similarity) + python 코드

koos808 2020. 9. 25. 11:30
728x90
반응형

* 벡터간의 유사도를 측정할 수 있는 대표적인 방법은 유클리디안 거리와 같은 거리 계산 방법말고도 코사인 유사도가 있습니다. 추천시스템에서 많이 쓰이는 코사인 유사도의 수식과 구현 코드에 대해서 알아보겠습니다.

 

* 코사인 유사도 : 코사인 유사도(― 類似度, 영어: cosine similarity)는 내적공간의 두 벡터간 각도의 코사인을 이용하여 측정된 벡터간의 유사한 정도를 의미합니다.

 

* 두 벡터의 코사인값은 유클리디안 스칼라곱 공식에서 유도할 수 있습니다.

속성 A, B의 벡터값이 각각 주어졌을 때, 코사인 유사도 cos(θ)는 벡터의 스칼라곱과 크기로 다음과 같이 표현할 수 있습니다.

 

* cosθ의 θ가 1에 가까울 수록 "방향"(거리는 고려 X)을 기준으로 두 개의 벡터가 유사하다고 볼 수 있습니다.

 

아래 코사인 유사도와 코사인 거리는 다르므로 주의하셔서 계산 및 사용해야 합니다.

 

* 코사인 유사도 = cosθ

<-> 코사인 거리 = 1 - cosθ


※ Numpy를 이용해 코사인 유사도 구하기

# import
from numpy import dot
from numpy.linalg import norm
import numpy as np

# 코사인 유사도 함수 
def cos_sim(A, B):
       return dot(A, B)/(norm(A)*norm(B))

# data
doc1=np.array([0,1,1,1])
doc2=np.array([1,0,1,1])
doc3=np.array([2,0,2,2])

print(cos_sim(doc1, doc2)) #문서1과 문서2의 코사인 유사도
print(cos_sim(doc1, doc3)) #문서1과 문서3의 코사인 유사도
print(cos_sim(doc2, doc3)) #문서2과 문서3의 코사인 유사도

# 결과
# 0.67
#0.67
#1.00

 

 

※ 코드 참고 : wikidocs.net/24603

위 사이트 자료를 참고하시면 더 다양한 사례와 코드를 확인하실 수 있습니다.

728x90
반응형

'Statistics' 카테고리의 다른 글

Precision과 Recall  (0) 2020.09.28
성능평가지표, 모델 평가 방법 Python Code  (0) 2020.09.28
배깅(Bagging)과 부스팅(Boosting)  (0) 2020.07.05
1종 오류와 2종 오류  (0) 2020.07.05
P-value 정의와 이해  (0) 2020.07.05
Comments