Table of Contents
클러스터링에서 유사성 또는 거리는 데이터 포인트들 간의 유사성을 측정하는 중요한 개념입니다. 유사성을 정의하는 방법에 따라 클러스터링의 결과가 달라질 수 있으며, 다양한 거리 계산 방법이 존재합니다. 여기에서는 주로 사용되는 거리 계산 방법들을 자세히 설명하겠습니다.
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 |
- Total
- Today
- Yesterday
- Lora
- Numpy
- speaking
- git
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- 코딩테스트
- nlp
- 손실함수
- clustering
- RAG
- LIST
- Transformer
- 파이썬
- PEFT
- recursion #재귀 #자료구조 # 알고리즘
- Github
- 리스트
- English
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- Array
- 티스토리챌린지
- 해시
- LLM
- cnn
- t5
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- Hugging Face
- Python
- classification
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |