Table of Contents

728x90

클러스터링 평가지표는 클러스터링 알고리즘이 생성한 클러스터의 품질을 평가하는 데 사용됩니다. 이 지표들은 주로 내부 평가 지표와 외부 평가 지표로 나뉩니다.

내부 평가 지표 (Internal Evaluation Metrics)

내부 평가 지표는 클러스터의 품질을 데이터 자체의 특성을 기반으로 평가합니다. 이는 외부 레이블이 없는 경우에도 사용할 수 있습니다.

  1. Silhouette Score (실루엣 점수)
    • 각 데이터 포인트의 실루엣 계수는 해당 포인트가 속한 클러스터 내의 응집도와 다른 클러스터 간의 분리도를 기반으로 계산됩니다.
    • 실루엣 계수는 -1에서 1 사이의 값을 가지며, 값이 클수록 클러스터링이 잘 된 것을 의미합니다.
      • 1에 가까울수록 데이터 포인트가 잘 맞는 클러스터에 속해 있고, 다른 클러스터와 잘 분리되어 있음을 나타냅니다.
      • 0에 가까울수록 클러스터 간의 경계에 있음을 나타냅니다.
      • -1에 가까울수록 잘못된 클러스터에 속해 있음을 나타냅니다.
  2. Davies-Bouldin Index (데이비스-볼딘 지수)
    • 클러스터 내의 응집도와 클러스터 간의 분리도를 모두 고려하는 지표입니다.
    • 모든 클러스터의 평균 응집도를 계산하고, 이를 클러스터 간의 분리도로 나눕니다.
    • 값이 작을수록 클러스터가 더 잘 분리되어 있고 응집도가 높음을 의미합니다.
  3. Dunn Index (던 지수)
    • 클러스터 내의 최대 거리와 클러스터 간의 최소 거리를 비교하여 클러스터링의 품질을 평가합니다.
    • 값이 클수록 클러스터가 더 잘 분리되어 있고 응집도가 높음을 의미합니다.

외부 평가 지표 (External Evaluation Metrics)

외부 평가 지표는 클러스터링 결과를 사전에 알려진 레이블(정답)과 비교하여 평가합니다. 이는 데이터에 대한 레이블이 있는 경우에만 사용할 수 있습니다.

  1. Adjusted Rand Index (조정 랜드 지수)
    • 클러스터링 결과와 실제 레이블 간의 일치를 측정합니다.
    • 값이 -1에서 1 사이에 있으며, 1에 가까울수록 클러스터링 결과가 실제 레이블과 잘 맞는 것을 의미합니다.
    • 0은 무작위 군집화와 일치함을 나타냅니다.
  2. Normalized Mutual Information (정규화된 상호 정보, NMI)
    • 클러스터링 결과와 실제 레이블 간의 정보 공유를 측정합니다.
    • 값이 0에서 1 사이에 있으며, 1에 가까울수록 클러스터링 결과가 실제 레이블과 잘 맞는 것을 의미합니다.
  3. Homogeneity, Completeness, V-Measure
    • Homogeneity (균질성): 각 클러스터가 한 클래스에만 속하는 정도를 측정합니다.
    • Completeness (완전성): 한 클래스의 모든 데이터 포인트가 동일한 클러스터에 속하는 정도를 측정합니다.
    • V-Measure: 균질성과 완전성의 조화 평균입니다.

클러스터링 결과 평가 시 고려사항

  • 클러스터 수: 많은 평가 지표는 클러스터 수에 민감할 수 있습니다. 따라서 적절한 클러스터 수를 선택하는 것이 중요합니다.
  • 클러스터 크기: 클러스터의 크기와 밀도가 균일하지 않으면 일부 지표는 왜곡될 수 있습니다.
  • 계산 복잡도: 일부 지표는 계산 비용이 높을 수 있으므로, 큰 데이터 세트에서는 계산 효율성을 고려해야 합니다.

예시 코드

Python을 사용하여 클러스터링 평가지표를 계산하는 예시 코드를 제공하겠습니다.

import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score, davies_bouldin_score, adjusted_rand_score, normalized_mutual_info_score
from sklearn.datasets import make_blobs

# 데이터 생성
X, y_true = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

# K-Means 클러스터링
kmeans = KMeans(n_clusters=4)
y_kmeans = kmeans.fit_predict(X)

# 내부 평가 지표
silhouette_avg = silhouette_score(X, y_kmeans)
davies_bouldin = davies_bouldin_score(X, y_kmeans)

print(f'Silhouette Score: {silhouette_avg}')
print(f'Davies-Bouldin Index: {davies_bouldin}')

# 외부 평가 지표
adjusted_rand = adjusted_rand_score(y_true, y_kmeans)
nmi = normalized_mutual_info_score(y_true, y_kmeans)

print(f'Adjusted Rand Index: {adjusted_rand}')
print(f'Normalized Mutual Information: {nmi}')

이 코드는 K-Means 클러스터링을 수행하고, 내부 평가 지표인 Silhouette Score와 Davies-Bouldin Index, 외부 평가 지표인 Adjusted Rand Index와 Normalized Mutual Information을 계산합니다. 이를 통해 클러스터링의 품질을 평가할 수 있습니다.