▶ 코사인 유사도란?
우리는 벡터 간 유사도를 측정함으로써 두 벡터가 얼마나 비슷한지를 알 수 있다. 그 유사도를 측정하는 방법 중 하나가 코사인 유사도이다.
벡터가 "유사하다"는 것은 두 벡터의 길이와 방향이 비슷한 방향과 길이를 가진다는 의미이다. 코사인 유사도는 두 벡터의 방향, 즉 각도에 기초해서 유사도를 측정한다.
다음과 같은 좌표들을 가진 세 벡터가 있다고 해보자.
그림을 보면 A벡터와 B벡터가 A와 C벡터는 유사할 것으로 보인다. 코사인 유사도로 측정하였을 때에도 우리의 추측과 일치하는지 알아보자.
▶ 코사인 유사도 공식
이때 각도 theta, 즉 v1과 v2 사이의 각도가 0에서 90도 사이이면 코사인 값이 +값이 나오고 90에서 180도 사이로 둔각이면 -값이 나온다. 따라서 코사인 유사도는 -1에서 +1사이의 값을 가진다.
각도가 0에 가까울 수록(유사도가 +1에 가까울 수록) 두 벡터간 각도가 작다는 의미이므로 벡터 간 유사도가 크고, 각도가 180도에 가까울수록(유사도가 -1에 가까울 수록) 두 벡터간 각도가 크다는 의미이므로 벡터 간 유사도가 작다는 의미이다.
▷ 코사인 유사도 공식 증명
코사인 유사도는 제 2 코사인 법칙에 의해 다음과 같이 증명될 수 있다.
▶ 코사인 유사도 구현
코사인 유사도를 파이썬으로 구현해보았다.
함수로 구현한 cosine_sim를 sckit-learn에선 cosine_similarity함수로 제공하고 있다.
이제 해당 함수와 sklearn의 함수를 통해 이번 포스팅에서 알아보고자 했던 벡터 A,B,C의 유사도를 측정해보자.
우선 A와 B벡터의 유사도를 구해보자
구현한 함수로 구한 답과 sklearn으로 구한 유사도가 동일함을 볼 수 있다. 코사인 유사도 값이 약 0.98로 1에 아주 가까운 것을 볼 수 있다. 즉 A와 B 벡터가 매우 유사하다는 것을 알 수 있다.
이번에는 딱히 유사하지 않을 것 같다고 추측한 A와 C벡터의 유사도를 구해보자.
A와 C의 유사도는 약 0.55로 A와 B의 유사도보다 현저히 유사성이 떨어지는 것을 확인할 수 있다. 처음 그래프를 보고 추측한 내용을 코사인 유사도 수치를 통해 확인할 수 있었다.
이렇듯 우리는 코사인 유사도 값을 이용해 두 벡터 간 물리적 유사성을 알 수 있다.
'수학 > 선형대수학' 카테고리의 다른 글
직선, 평면 벡터방정식 (0) | 2021.07.14 |
---|---|
전치행렬 (1) | 2021.07.13 |
역행렬과 역행렬의 특징/ 행렬식, (비)가역행렬 (3) | 2021.07.12 |
연립 일차 방정식, 행렬로 풀기/ 가우스조던 소거법, 역행렬 (0) | 2021.07.12 |
행렬의 연산/ 덧셈, 뺄셈, 곱셈 (2) | 2021.07.09 |