본문 바로가기
유사도Similarity와 거리들 - 여기에서 많은 것들이 시작된다.

이제까지는 최소값에 대한 이야기를 했다면, 데이터끼리 얼마나 가까운지(비슷한지)를 어떤 식으로 접근하는지도 들여다봐야 하겠습니다. 이 Similiarity를 잘 이해할 수 있다면 여러 가지 모형에 대해서 쉽게 접근할 수 있으니까 잘 이해해두길 바라는 마음에서 시작하는 뭐, 간단한 그런 이야기입니다. 

제일 쉬운 경우로 쉽게 시작한다면, 어떤 데이터끼리의 거리가 가깝다면 서로 비슷하다고 볼 수 있겠죠. 

그런 예로는 기하학적 거리를 말할 수 있는데, 이미 잘 알고 있는 피타고라스 이야기 - 피타고라스님을 여기서 또 만날 줄이야 - 와 비슷한데, 어떤 의미인지 좀 살펴보도록 하겠습니다. 

어떤 데이터쌍 $(x_1, y_1), (x_2, y_2)$ 가 있다고 했을 때 둘 사이의 거리 d는 어떻게 되던가요?

 

이거 피타고라스 정리에 의해서 $d = \sqrt{ (x_2-x_1)^2 + (y_2-y_1)^2} $ 가 되잖아요? 이런 걸 유식한 말로 유클리디언 Distance라고 부릅니다. 가장 간단한 데이터끼리의 거리입니다. 

예를 들어, 학생 1과 학생 2의 영어점수와 수학점수를 각각의 데이터 쌍으로 둔다면, 

(영어점수1-영어점수2)² + (수학점수1-수학점수2)² 를 루트 씌워서 계산하면 두 학생의 거리가 어느 정도 되는지를 계산하게 되는 뭐 그런 건데요. 예를 들어, 

 

이런 점수 세트가 있을 때, 

학생1과 학생2 거리는 $\sqrt{(10-11)^2 + (20-18)^2}$ = 2.24 거든요. 

같은 방식으로 계산하면 학생1과 학생3의 거리는 14.14, 학생2과 학생3의 거리는 12.04가 됩니다. 그러니까, 학생1과 학생2가 매우 가깝다. (또는 비슷하다)고 생각할 수 있습니다. 사실 그림으로 그려보면 딱 알 수 있겠습니다. 

각 Columns 즉 Feature를 차원의 축으로 생각하면 수 백개 차원도 그렇게 계산할 수 있다는 뭐 그런 겁니다. 사실 딱 봐도 그렇죠? 또 확장된 예를 들면 영어, 수학, 국어, 체육 점수가 있다면 같은 방법으로 거리를 구할 수 있겠는데요, 이런 걸 어디에 이용할 수 있는가 생각해 보면, 이런 학생이 여러 명 을 때 그중에 거리가 가까운 학생들을 찾아내면, 이 학생들의 관리를 같은 방법으로 할 수 있겠네? 뭐 그런 겁니다. 사실 이건 거리니까, 거리가 가까울수록 큰 값이 유사도라고 한다면 거리의 역수를 취해주면 되겠죠. 

또 유사도를 측정할 수 있는 방법을 알아보자면, 제일 많이 사용되는 것이 코사인 유사도 인데, 이게 뭐냐면 두 개의 데이터를 벡터로 보았을 때, 두 벡터 사이의 각이 작을수록 비슷하다고 보는 것입니다. 위치하고는 별개로 같은 방향인가를 보는 것인데요, 이때 사잇각을 어떤 식으로 측정하냐 하면 벡터의 Dot Product를 이용하면 쉽게 구할 수 있습니다. A와 B벡터가 있다고 했을 때, A와 B의 Dot product는 

$$ A\cdot B = ||A||\,||B|| cos(\theta)$$
이런 식으로 정의됩니다. 여기에서 ||X||는 X벡터의 길이인데요, 보통 L2 Norm이라고 부릅니다. - L2니까 당연히 L1도 있고 수많은 Norm이 있습니다만. 이건 다음 기회에.. - L2 Norm은 별게 아닌 게 방금 피타고라스 정리에서 본 d와 같은 겁니다. L2 Norm이라는 걸 강조하기 위해서 2를 덧붙여서 다시 표현하자면, 

 

이런 겁니다. 결국 이 Norm이라는 게 벡터의 크기를 의미하는데, 지금은 그렇구만 이라고 생각하고, 금방 다시 자세히 볼 기회가 있을 겁니다. 어쨌든 Dot Prodcut를 왜 이렇게 정의할 수 있는가는 지금 하려는 이야기와는 조금 다른 이야기니까 그것은 따로 이야기하지 않는 것은 이해해 주세요. 어쨌든 이때의 사잇각을 기준으로 식을 다시 정리하면 

$$Similiarity(A,B) = cos(\theta) = \cfrac{A\cdot B}{ ||A|| \, ||B||} = \cfrac{\sum_{i}^{n}A_i B_i}{\sqrt{\sum_i^n A_i^2} \sqrt{\sum_i^n B_i^2}} $$ 

이런 식으로 정리할 수 있겠는데, 사잇각 θ가 작아질 수록 cos(θ)는 1에 가까워지니까 1에 가까울수록 두 벡터는 같은 방향으로 비슷하고, -1에 가까워질수록 반대방향을 가리키는 벡터가 됩니다. 그렇습니다. 그리고 서로 수직 하게 되면 cos(90˚)=0 가 되는데 이런 경우에는 완전 다른 방향을 가리키니까 유사도가 0이라고 생각합니다. 눈치챘겠지만 코사인 유사도는 각각의 벡터크기는 별로 고려하지 않습니다. 


참고로 방금 다룬 Dot Product는 벡터의 곱 AᵀB로도 표현할 수 있겠습니다. 허허. 그렇군요. 이때, $A \cdot B = ||A||\,||B||\,cos(\theta)$ 니까 ||A||cos(θ)는 A벡터의 B벡터로의 정사영이 됩니다. 

 

정사영이라는 건 영어로는 (Orthogonal) Projection이라고 하는데, 쉽게 얘기해서 수직으로 투영된 그림자라는 겁니다. 빛으로 투영해 봤을 때 생기는 그림자 뭐 그런거죠.

이런 겁니다.  그렇다면, $ ||A||cos\theta$가 정사영이 되니까, $\cfrac{A\cdot B}{||B||}$ 역시 A벡터의 B벡터로의 정사영이 되겠죠? 그러니까 $\cfrac{A\cdot B}{||B||}$ 이것의 결과는 B벡터에 대한 성분을 A벡터가 얼마나 가지고 있는가를 나타낼 수도 있겠습니다. - 그림에 A와 B가 Vector라는 점을 강조하기 위해서 언더라인을 덧붙여 봤습니다. 여러 가지 표현법을 알면 좋으니까요. -

보통 "Dot product의 결과는 B라는 기준 벡터에서 A라는 벡터가 얼마나 B벡터의 성분이 들어있나로 해석 가능"이라는 말이 횡횡하는데 사실 B의 크기로 나누지 않은 Dot Product의 결과 자체는 A의 B로의 정사영 성분크기가 아니라 이것에 B벡터의 크기가 곱해진 값입니다. 

하지만, A와 B의 Dot product는 어찌 보면 ||A|| ||B||가 최대이고, -||A|| ||B||가 최소인 관계로 생각할 수도 있겠습니다. 크기가 클수록 두 벡터가 서로 닮았다고도 볼 수 있겠습니다. 내적 결과만 가지고는 닮을수록 값이 크다라는 말은 True이지만, 얼마나 크면 의미가 있는 것인지는 알 수 없습니다. 다만, 크기가 의미를 갖고 있다면 두 Vector의 크기의 곱에 대한 의미를 따로 설정할 수는 있겠습니다.

결국, 정리해 보면, 
코사인유사 :  cosθ는 두 Vector의 방향이 같은지만 고려하는 것이고, 
Dot Product :  두 Vector의 방향과 크기까지 고려해서 유사도를 보는 것이라고 생각하면 좋겠습니다. 방향을 일치시켜서 크기를 곱셈하는 연산이니까요. 다른 벡터에 정사영 된 Vector의 길이가 짧을수록 유사도가 낮고, 길 수록 유사도가 높다고도 볼 수 있습니다. 대상 Vector를 고정하고 다른 것들과 내적 하면 어느 것이 가장 대상 Vector와 비슷할까를 볼 때 매우 유용하겠습니다. 

Dot Product(점곱)와 Inner Product(내적)에 대해서 용어가 혼재하는데, 같은 겁니다. 두 개가 차이가 있느냐 하면 당연히 없습니다. 

Dot Product는 Vector곱으로 표현할 수 있습니다. 즉,

$A\cdot B = \begin{bmatrix} 1 \\ 2 \end{bmatrix} \cdot \begin{bmatrix} 3 \\ 4 \end{bmatrix} = 1\times3 + 2\times 4 = 9 $ 로 Elementwise로 계산하는 건데요. 이게 또 벡터곱으로 생각하면 $A^T B = \begin{vmatrix} 1 & 2 \end{vmatrix} \cdot \begin{bmatrix} 3 \\ 4 \end{bmatrix} = 1\times3 + 2\times 4 = 9 $ 이렇게 똑같이 계산할 수 있습니다. 그러니까 일반적으로 마구 섞어 쓰도 찰떡같이 알아들어야 한다는 점을 미리 알아두면 좋을 것 같습니다. 

방금 다룬 유사도 이외에 정말 많은 유사도들이 있는데요, 예를 들면 맨하탄 거리, 민코스키 거리, Mahalanobis 거리, 피어슨 상관계수,  자카드 유사도 등의 많은 유사도들이 있는데 그것들은 그것대로 필요할 때마다 또다시 들여다보는 것이 좋겠습니다. 

 

친절한 데이터 사이언스 강좌 글 전체 목차 (정주행 링크) -



댓글





친절한 데이터 사이언스 강좌 글 전체 목차 (정주행 링크) -