Table of Contents

ML

클러스터링에서 거리 계산 방법

꼬꼬마코더 2024. 5. 29. 18:38
728x90

클러스터링에서 유사성 또는 거리는 데이터 포인트들 간의 유사성을 측정하는 중요한 개념입니다. 유사성을 정의하는 방법에 따라 클러스터링의 결과가 달라질 수 있으며, 다양한 거리 계산 방법이 존재합니다. 여기에서는 주로 사용되는 거리 계산 방법들을 자세히 설명하겠습니다.

1. 유클리드 거리 (Euclidean Distance)

유클리드 거리는 두 점 사이의 직선 거리를 측정하는 방법으로, 가장 많이 사용되는 거리 계산 방법 중 하나입니다. 2차원 공간에서 두 점 ((x_1, y_1))와 ((x_2, y_2)) 사이의 유클리드 거리는 다음과 같이 계산됩니다.

[ \text{Euclidean Distance} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} ]

일반적으로 (n)차원 공간에서는 다음과 같이 확장됩니다.

[ \text{Euclidean Distance} = \sqrt{\sum_{i=1}^n (x_{i2} - x_{i1})^2} ]

코드 예시

import numpy as np

# 두 점 사이의 유클리드 거리 계산
point1 = np.array([1, 2])
point2 = np.array([4, 6])
euclidean_distance = np.linalg.norm(point1 - point2)
print(f'Euclidean Distance: {euclidean_distance}')

2. 맨하탄 거리 (Manhattan Distance)

맨하탄 거리는 두 점 사이의 거리 중 축에 평행한 경로를 따라 측정하는 방법입니다. 이는 마치 격자형 도시 블록을 걸어가는 것과 비슷합니다. 2차원 공간에서 두 점 ((x_1, y_1))와 ((x_2, y_2)) 사이의 맨하탄 거리는 다음과 같이 계산됩니다.

[ \text{Manhattan Distance} = |x_2 - x_1| + |y_2 - y_1| ]

일반적으로 (n)차원 공간에서는 다음과 같이 확장됩니다.

[ \text{Manhattan Distance} = \sum_{i=1}^n |x_{i2} - x_{i1}| ]

코드 예시

# 두 점 사이의 맨하탄 거리 계산
manhattan_distance = np.sum(np.abs(point1 - point2))
print(f'Manhattan Distance: {manhattan_distance}')

3. 민코프스키 거리 (Minkowski Distance)

민코프스키 거리는 유클리드 거리와 맨하탄 거리를 일반화한 거리 계산 방법입니다. 파라미터 (p)를 통해 다양한 거리를 표현할 수 있습니다. (p=1)일 때는 맨하탄 거리, (p=2)일 때는 유클리드 거리와 같습니다. 두 점 사이의 민코프스키 거리는 다음과 같이 계산됩니다.

[ \text{Minkowski Distance} = \left( \sum_{i=1}^n |x_{i2} - x_{i1}|^p \right)^{1/p} ]

코드 예시

# 두 점 사이의 민코프스키 거리 계산
p = 3  # p값을 변경하여 다양한 거리를 표현 가능
minkowski_distance = np.linalg.norm(point1 - point2, ord=p)
print(f'Minkowski Distance (p={p}): {minkowski_distance}')

4. 코사인 유사성 (Cosine Similarity)

코사인 유사성은 두 벡터 간의 코사인 각도를 측정하여 유사성을 계산합니다. 이는 주로 텍스트 데이터나 고차원 데이터에서 사용됩니다. 두 벡터 (\mathbf{A})와 (\mathbf{B}) 사이의 코사인 유사성은 다음과 같이 계산됩니다.

[ \text{Cosine Similarity} = \frac{\mathbf{A} \cdot \mathbf{B}}{|\mathbf{A}| |\mathbf{B}|} ]

여기서 (\mathbf{A} \cdot \mathbf{B})는 두 벡터의 내적, (|\mathbf{A}|)와 (|\mathbf{B}|)는 벡터의 크기(노름)입니다.

코드 예시

from numpy import dot
from numpy.linalg import norm

# 두 벡터 사이의 코사인 유사성 계산
vector1 = np.array([1, 2, 3])
vector2 = np.array([4, 5, 6])
cosine_similarity = dot(vector1, vector2) / (norm(vector1) * norm(vector2))
print(f'Cosine Similarity: {cosine_similarity}')

5. 자카드 유사성 (Jaccard Similarity)

자카드 유사성은 두 집합 간의 유사성을 측정하는 방법으로, 두 집합의 교집합 크기를 합집합 크기로 나눈 값입니다. 이는 주로 이진 속성 데이터에서 사용됩니다.

[ \text{Jaccard Similarity} = \frac{|A \cap B|}{|A \cup B|} ]

코드 예시

# 두 집합 사이의 자카드 유사성 계산
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
jaccard_similarity = len(set1.intersection(set2)) / len(set1.union(set2))
print(f'Jaccard Similarity: {jaccard_similarity}')

이와 같이 다양한 거리 계산 방법을 통해 데이터 포인트들 간의 유사성을 측정할 수 있으며, 각 방법은 데이터의 특성과 분석 목적에 따라 적절히 선택되어야 합니다.

'ML' 카테고리의 다른 글

Validation set(검증 세트)  (0) 2024.05.30
Optimal Binning  (0) 2024.05.30
클러스터링 Clustering  (0) 2024.05.29
하이퍼파라미터 튜닝 Hyperparameter tunning  (0) 2024.05.29
교차검증(Cross-Validation)  (0) 2024.05.29