[파이썬] scipy 계층적 클러스터링

계층적 클러스터링은 scipy 라이브러리에서 제공하는 scipy.cluster.hierarchy 모듈을 통해 구현할 수 있습니다.

Hierarchical Clustering 알고리즘 소개

계층적 클러스터링은 두 가지 방법으로 구현될 수 있습니다.

  1. 병합적 접근법(AGGLOMERATIVE APPROACH): 각 데이터 포인트를 하나의 클러스터로 간주하고 유사성을 기반으로 클러스터를 병합해 나가는 방식입니다.
  2. 분할적 접근법(DIVISIVE APPROACH): 모든 데이터 포인트를 하나의 클러스터로 간주한 후, 유사성을 기반으로 클러스터를 분할해 나가는 방식입니다.

본 문서에서는 병합적 접근법에 대해 다루도록 하겠습니다.

계층적 클러스터링의 구현

계층적 클러스터링을 구현하기 위해서는 먼저 데이터 포인트들 간의 유사성 메트릭을 정의해야 합니다. 가장 일반적인 메트릭은 유클리드 거리(Euclidean distance)입니다.

아래는 scipy를 사용하여 계층적 클러스터링을 수행하는 예제 코드입니다.

import numpy as np
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt

# 샘플 데이터 생성
np.random.seed(123)
X = np.random.random((10, 2))

# 거리 메트릭 및 연결 방법 설정
dist_metric = 'euclidean'  # 유클리드 거리
linkage_method = 'ward'    # ward 방법

# 계층적 클러스터링 수행
Z = linkage(X, method=linkage_method, metric=dist_metric)

# 덴드로그램(Dendrogram) 그리기
plt.figure(figsize=(10, 5))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
dendrogram(Z)
plt.show()

위 예제 코드에서는 먼저 샘플 데이터를 생성하고, linkage() 함수를 통해 계층적 클러스터링을 수행한 후, dendrogram() 함수를 사용하여 결과를 시각화합니다.

결과 해석

덴드로그램(Dendrogram)은 계층적 클러스터링 결과를 시각화하는 도구입니다. x축은 데이터 포인트의 인덱스를 나타내며, y축은 클러스터 사이의 거리를 나타냅니다. 맨 아래부터 시작하여 높이가 증가할수록 클러스터 간의 거리가 커집니다.

덴드로그램을 해석하여 클러스터를 생성하는 방법은 다양한 기준에 따라 달라질 수 있습니다. 예를 들어, 높이가 어느 정도 이상인 지점에서 가로로 직선을 그으면 클러스터를 형성할 수 있습니다.

계층적 클러스터링은 클러스터링 결과의 해석이 다소 주관적일 수 있으므로, 해당 데이터에 맞는 적절한 해석 방법을 선택하는 것이 중요합니다.

마무리

Scipy를 이용한 계층적 클러스터링은 간단한 방법으로 데이터 포인트들을 계층적으로 그룹화할 수 있는 강력한 도구입니다. 데이터 간 유사성에 기반하여 클러스터를 생성하고, 시각화하여 해석하는 과정을 익혀두면 다양한 데이터 분석 및 패턴 탐색에 활용할 수 있을 것입니다. ```