Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 덴드로그램의 분기 길이를 조정하는 방법

Matplotlib에서 덴드로그램(dendrogram)의 분기 길이를 조정하려면 SciPy의 계층적 클러스터링 함수와 함께 dendrogram() 메서드를 활용하면 됩니다. 아래에서 단계별로 자세히 살펴보겠습니다.

덴드로그램이란?

덴드로그램은 계층적 군집화(hierarchical clustering) 결과를 나무 형태로 시각화한 그래프입니다. 각 분기(branch)의 길이는 클러스터가 병합되는 거리(비유사성)를 나타내며, 데이터 포인트 간의 유사 관계를 한눈에 파악하는 데 매우 유용합니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
  • 다변량 정규분포(multivariate normal distribution)에서 무작위 샘플 ab를 생성합니다.
  • concatenate() 메서드를 사용하여 기존 축을 따라 배열들을 연결합니다.
  • linkage() 메서드로 계층적/응집형(agglomerative) 클러스터링을 수행합니다.
  • figure() 메서드를 사용하여 새 그림을 생성하거나 기존 그림을 활성화합니다.
  • 서브플롯 배치의 일부로 그림에 축(axes)을 추가합니다.
  • dendrogram() 메서드를 사용하여 계층적 클러스터링 결과를 덴드로그램으로 그립니다.
  • show() 메서드를 사용하여 그림을 화면에 표시합니다.

예제 코드

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

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# 다변량 정규분포에서 무작위 샘플 생성
a = np.random.multivariate_normal([0, 10], [[3, 1], [1, 4]], size=[2])
b = np.random.multivariate_normal([0, 10], [[3, 1], [1, 4]], size=[3])

# 배열 연결
X = np.concatenate((a, b), )

# 계층적 클러스터링 수행
Z = linkage(X)

# 그림 및 축 생성 후 덴드로그램 그리기
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
dendrogram(Z, ax=ax)
plt.show()

실행 결과

Matplotlib에서 덴드로그램의 분기 길이를 조정하는 방법

위 코드를 실행하면 5개의 데이터 포인트가 병합되는 과정을 보여주는 덴드로그램이 출력됩니다. 각 분기의 세로 길이는 해당 병합 단계에서의 거리 값을 의미하며, 이 값이 클수록 두 클러스터 간의 차이가 크다는 것을 나타냅니다. 필요에 따라 dendrogram() 함수의 color_threshold, above_threshold_color 등의 옵션을 함께 조정하면 분기 표현 방식을 더욱 세밀하게 제어할 수 있습니다.