머신러닝

머신러닝에서의 유사도(Similarity)와 거리(Distance)의 차이

move84 2025. 4. 12. 08:45
반응형

머신러닝에서 유사도와 거리는 데이터 포인트 간의 관계를 측정하는 데 사용되는 중요한 개념이다. 이 두 개념은 서로 밀접하게 관련되어 있지만, 그 의미와 적용 방식에는 차이가 있다. 유사도는 두 데이터 포인트가 얼마나 비슷한지를 나타내며, 거리는 두 데이터 포인트가 얼마나 다른지를 나타낸다. 이 글에서는 유사도와 거리의 차이점을 명확히 설명하고, 각 개념이 머신러닝에서 어떻게 활용되는지 알아본다.


📏 유사도 (Similarity)
유사도는 두 데이터 포인트가 얼마나 비슷한지를 정량적으로 나타내는 지표다. 유사도 값이 높을수록 두 데이터 포인트는 더 유사하다고 판단한다. 유사도를 측정하는 다양한 방법이 있으며, 데이터의 특성과 문제의 목적에 따라 적절한 유사도 측정 방법을 선택해야 한다. 유사도는 일반적으로 0과 1 사이의 값을 가지며, 1에 가까울수록 더 유사하다는 의미이다.

  • 코사인 유사도 (Cosine Similarity): 두 벡터 사이의 코사인 각도를 이용하여 유사도를 측정한다. 텍스트 데이터 분석, 추천 시스템 등에서 널리 사용된다.
  • 피어슨 상관계수 (Pearson Correlation Coefficient): 두 변수 간의 선형 상관 관계를 측정한다. -1부터 1 사이의 값을 가지며, 1에 가까울수록 양의 상관 관계, -1에 가까울수록 음의 상관 관계를 나타낸다.
  • 자카드 유사도 (Jaccard Similarity): 두 집합 간의 교집합 크기를 합집합 크기로 나눈 값이다. 텍스트 데이터의 유사성 비교, 추천 시스템 등에 사용된다.
# 코사인 유사도 예시 코드
import numpy as np
from numpy.linalg import norm

def cosine_similarity(a, b):
    cos_sim = np.dot(a, b) / (norm(a) * norm(b))
    return cos_sim

# 두 벡터 정의
vector_a = np.array([1, 2, 3])
vector_b = np.array([4, 5, 6])

# 코사인 유사도 계산
similarity = cosine_similarity(vector_a, vector_b)
print(f'Cosine Similarity: {similarity}')

📐 거리 (Distance)
거리는 두 데이터 포인트가 얼마나 떨어져 있는지를 나타내는 지표다. 거리 값이 작을수록 두 데이터 포인트는 더 가깝다고 판단한다. 거리 측정 방법 역시 다양하며, 데이터의 특성과 문제의 목적에 따라 적절한 거리 측정 방법을 선택해야 한다. 거리는 일반적으로 0 이상의 값을 가지며, 0에 가까울수록 더 가깝다는 의미이다.

  • 유클리드 거리 (Euclidean Distance): 두 점 사이의 직선 거리를 측정한다. 가장 기본적인 거리 측정 방법 중 하나이며, 다양한 분야에서 널리 사용된다.
  • 맨해튼 거리 (Manhattan Distance): 두 점 사이의 각 좌표축 방향 거리의 합을 측정한다. 택시 거리라고도 불리며, 도시 블록 구조에서 거리를 측정하는 데 유용하다.
  • 민코프스키 거리 (Minkowski Distance): 유클리드 거리와 맨해튼 거리를 일반화한 거리 측정 방법이다. 파라미터 p에 따라 다양한 거리 척도를 사용할 수 있다.
  • 해밍 거리 (Hamming Distance): 두 이진 벡터에서 서로 다른 비트의 개수를 측정한다. 오류 정정 코드, 텍스트 비교 등에 사용된다.
# 유클리드 거리 예시 코드
import numpy as np

def euclidean_distance(a, b):
    distance = np.sqrt(np.sum((a - b)**2))
    return distance

# 두 점 정의
point_a = np.array([1, 2])
point_b = np.array([4, 6])

# 유클리드 거리 계산
distance = euclidean_distance(point_a, point_b)
print(f'Euclidean Distance: {distance}')

🤔 유사도와 거리의 관계
유사도와 거리는 서로 반비례 관계를 갖는 경우가 많다. 즉, 유사도가 높을수록 거리는 작아지고, 유사도가 낮을수록 거리는 커진다. 따라서, 유사도를 거리로 변환하거나 거리를 유사도로 변환하여 사용할 수 있다. 예를 들어, 코사인 유사도는 다음과 같은 방식으로 거리를 변환할 수 있다.

  • 거리 = 1 - 코사인 유사도

이와 같은 변환을 통해 유사도와 거리를 상호 보완적으로 활용할 수 있다.


💡 머신러닝에서의 활용
유사도와 거리는 머신러닝의 다양한 분야에서 활용된다.

  • 클러스터링 (Clustering): 유사도 또는 거리를 이용하여 데이터 포인트를 그룹으로 묶는다.
  • 분류 (Classification): 유사도 또는 거리를 이용하여 새로운 데이터 포인트를 기존의 클래스로 분류한다.
  • 추천 시스템 (Recommendation System): 유사도 또는 거리를 이용하여 사용자에게 적합한 아이템을 추천한다.
  • 이상 탐지 (Anomaly Detection): 유사도 또는 거리를 이용하여 정상 데이터와 거리가 먼 이상 데이터를 탐지한다.
  • 차원 축소 (Dimensionality Reduction): 유사도 또는 거리를 이용하여 고차원 데이터를 저차원 데이터로 변환한다.
# K-평균 클러스터링 예시 코드
from sklearn.cluster import KMeans
import numpy as np

# 샘플 데이터 생성
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])

# K-평균 클러스터링 모델 생성 및 학습
kmeans = KMeans(n_clusters=2, random_state=0, n_init = 'auto').fit(data)

# 클러스터링 결과 확인
labels = kmeans.labels_
print(f'Cluster Labels: {labels}')

✅ 요약
머신러닝에서 유사도와 거리는 데이터 포인트 간의 관계를 측정하는 데 중요한 역할을 한다. 유사도는 두 데이터 포인트가 얼마나 비슷한지를 나타내고, 거리는 두 데이터 포인트가 얼마나 다른지를 나타낸다. 이 두 개념은 서로 반비례 관계를 갖는 경우가 많으며, 머신러닝의 다양한 분야에서 활용된다.

  • 유사도 (Similarity): 두 데이터 포인트가 얼마나 비슷한지를 나타내는 지표 (How similar two data points are?)
  • 거리 (Distance): 두 데이터 포인트가 얼마나 떨어져 있는지를 나타내는 지표 (How far apart two data points are?)
  • 코사인 유사도 (Cosine Similarity): 두 벡터 사이의 코사인 각도를 이용하여 유사도를 측정 (Measures the similarity between two vectors using the cosine angle)
  • 유클리드 거리 (Euclidean Distance): 두 점 사이의 직선 거리를 측정 (Measures the straight-line distance between two points)
  • 클러스터링 (Clustering): 유사도 또는 거리를 이용하여 데이터 포인트를 그룹으로 묶음 (Grouping data points using similarity or distance)
반응형