본문 바로가기

자기개발/Programming

머신러닝(Machine Learning) 기초 - 7 : 회귀법(Regression), 유클리디언 거리 (Euclidean distance), 맨하탄 거리 (Manhattan distance) & 해밍 거리(Hamming distance)

1. 유클리디언 거리 (Euclidean distance)

두 포인트 간 거리는 구하는 방법 중 가장 흔하게 사용되는 기법이 '유클리디언 거리 법'이다.

 

두 포인트 사이의 유클리디언 거리는 구하는 방법은 각각의 동일 차원 축 (x, y...) 간 거리를 뺀 값을 제곱하고 모두 더한 뒤 루트를 씌워준다 (하기 공식 참고)

수학 시간 때 배운 '피타고라스 정의'와 동일하지만 한 가지 차이점은 x, y, z를 넘어 고차원적인 계산에도 사용된다는 점이다 (해당 포스팅에서는 점(point)을 사용해 설명했지만 실제 사용은 포인트, 라인, 플래인 등 고차원적인 거리를 나타낸다)

 

 

2. 맨해튼 거리 (Manhattan distance)

맨하탄 거리 법은 유클리디언과 아주 유사하다. 

 

다른 점은 각 차원 축 간 차를 구하고 제곱이 아닌 절댓값을 씌운 후 합산해준다 (제곱 값을 넣지 않아 루트도 제외)

맨해튼 거리 법이라 불리는 이유는 실제 우리가 빌딩 간 거리의 모양과 비슷해서이며 'A 지점에서 B 지점까지 몇 블록을 걸어야 할까?'의 개념으로 이해하면 쉽다.

3. 해밍 거리 (Hamming distance)

해밍 거리 법은 상기 2가지 거리 계산과 약간의 차이점이 있다. 

 

실제 거리 (두 지점 간 차이를 계산)를 계산하기보다 두 지점이 동일한지의 여부를 판단한다. 두 포인트의 좌표(거리 표기)가 다르면 1을 더하는 방식으로 '얼마나 다른지'를 확인한다.

해밍 거리법은 '스펠링 체크' 알고리즘으로 흔히 사용된다


SciPy Distances 

 

거리를 구하는 방식 (로직)에 대해 알았으니 파이썬 라이브러리 중 Scipy를 이용하여 코드로 표현하는 방법에 대해 알아보자. 


* 유클리디언 거리(Euclidean Distance) : euclidean()
* 맨하튼 거리 (Manhattan Distance)  : cityblock()
* 해밍 거리 (Hamming Distance) : hamming()

 

첫 번째로 맨해튼 거리 법을 사용하기 위해 scipy 라이브러리 호출법은 cityblock()이다. (맨해튼 거리는 빌딩 사이 블록을 의미하기 때문에)

두 번째로 해밍 거리는 항상 0 혹은 1을 리턴한다. 각 차원 축에 대한 차이를 합산하지 않고 1 혹은 0을 계속 더한 이후에 차원 축 개수를 나눠준다

예를 들어 [1, 2, 3] 그리고 [7, 2, -10] 간 해밍 거리를 계산할 경우 2/3을 리턴 값으로 받는다.

 

https://www.scipy.org