코사인 유사도는 단순히
- 분자 2 개 벡터
- 분모가 2 개 벡터
- 즉 유클리드 길이, 즉의 크기의 제품과의 내적이 일부인 벡터 자체 내적의 제곱근
분자에 대해
, 예 : numpy
에서 :
>>> import numpy as np
>>> y = [1.0, 1.0, 1.0, 0.0, 0.0]
>>> x = [0.0, 1.0, 0.0, 1.0, 1.0]
>>> np.dot(x,y)
1.0
우리 곱셈 x_i로부터 및 y_i과 합산 개별 소자 내적 계산 마찬가지로 경우 :
>>> x_dot_y = sum([(1.0 * 0.0) + (1.0 * 1.0) + (1.0 * 0.0) + (0.0 * 1.0) + (0.0 * 1.0)])
>>> x_dot_y
1.0
분모를 들어, 우리는 numpy
의 크기를 계산할 수있다 :
>>> from numpy.linalg import norm
>>> y = [1.0, 1.0, 1.0, 0.0, 0.0]
>>> x = [0.0, 1.0, 0.0, 1.0, 1.0]
>>> norm(x) * norm(y)
2.9999999999999996
마찬가지로 numpy없이 유클리드 길이를 계산하면
>>> import math
# with np.dot
>>> math.sqrt(np.dot(x,x)) * math.sqrt(np.dot(y,y))
2.9999999999999996
그래서 코사인 유사성은 다음과 같습니다
>>> cos_x_y = np.dot(x,y)/(norm(x) * norm(y))
>>> cos_x_y
0.33333333333333337
당신은 또한 scipy
에서 직접 코사인 거리 함수를 사용할 수 있습니다
>>> from scipy import spatial
>>> 1 - spatial.distance.cosine(x,y)
0.33333333333333337
도 참조
크로스 사이트 중복 : [크로스 인증 됨에 (https://stats.stackexchange.com/q/311983/183808), [데이터 과학에 (https : //로 datascience. stackexchange.com/q/24370/323) – unor