위키득계정 ↗
과학

코사인 유사도

코사인 유사도과학
영문명
Cosine similarity
계산식
내적 / 두 유클리드 노름의 곱
실수 벡터의 범위
-1부터 1까지
주의할 입력
영벡터에는 기본 식을 적용할 수 없음
코사인 유사도는 영벡터가 아닌 두 벡터의 내적을 각 벡터 길이의 곱으로 나눈 값이다. 두 벡터가 이루는 각도의 코사인에 해당하며, 크기보다 방향이 얼마나 비슷한지를 비교한다.

크기가 달라도 같은 방향

u=(2, 1), v=(6, 3)을 생각하면 v는 u의 세 배다. 두 벡터의 크기는 다르지만 방향은 같아 코사인 유사도는 1이다. 반대로 값이 비슷한 범위에 있다고 해서 방향까지 비슷한 것은 아니므로 성분의 배치가 중요하다.

직각과 반대 방향

u=(1, 0), v=(0, 2)의 내적은 0이어서 유사도도 0이다. 두 벡터는 직각을 이룬다. v=(-3, 0)으로 바꾸면 반대 방향이 되어 유사도는 -1이다. 모든 성분이 음이 아닌 표현에서는 음수 값이 나오지 않지만 일반적인 실수 벡터에서는 가능하다.

영벡터를 만났을 때

영벡터는 길이가 0이므로 기본 식의 분모가 0이 된다. 방향 자체가 정해지지 않은 입력을 일반 벡터처럼 비교할 수 없는 것이다. 실제 계산에서는 영벡터를 제외하거나 별도의 규약을 정하고, 결과가 정의되지 않은 상태를 임의의 의미로 해석하지 않아야 한다.

유사도와 거리라는 이름

코사인 유사도를 1에서 뺀 값을 코사인 거리라고 부르기도 한다. SciPy의 cosine 함수도 이 값을 반환하므로 함수 이름만 보고 유사도라고 해석하면 결과 방향이 뒤집힌다. 같은 방향이면 유사도는 1이지만 이 비유사도는 0이다.

관련 문서

벡터 / 내적 / 유클리드 거리 / 코사인 법칙 / 자카드 유사도 / 다이스 계수