-
Agglomerative Clustering과 Pearson Correlation을 활용한 클러스터링카테고리 없음 2025. 2. 20. 23:13728x90
클러스터링(Clustering)은 데이터 분석에서 중요한 기법 중 하나로, 유사한 데이터들을 그룹화하는 데 사용됩니다. 특히 **Agglomerative Clustering(병합 군집화)**은 계층적 클러스터링(hierarchical clustering) 기법 중 하나로, 데이터 간 유사도를 기반으로 순차적으로 병합하는 방식으로 동작합니다.
이번 포스팅에서는 Agglomerative Clustering을 **Pearson Correlation(피어슨 상관 계수)**을 활용하여 수행하는 방법을 소개합니다. 특히, Pearson correlation의 절대값이 클수록 먼저 클러스터링하고, 0.5보다 작은 경우 클러스터링하지 않는 방식으로 적용해 보겠습니다.
1. Agglomerative Clustering이란?
Agglomerative Clustering은 데이터 포인트를 개별 클러스터로 시작한 후, 가장 유사한 클러스터를 반복적으로 병합하는 방식으로 작동합니다. 최종적으로 하나의 클러스터가 될 때까지 병합이 진행될 수 있으며, 특정 개수의 클러스터에서 멈출 수도 있습니다.
주요 특징:
- Bottom-up 방식: 모든 데이터를 개별 클러스터로 시작하여 병합
- 유사도 기준: 데이터 간 거리(distance)를 기반으로 병합
- 링케이지(Linkage) 방식: 평균 거리(average), 최단 거리(single), 최장 거리(complete) 등 다양한 방식이 존재
2. Pearson Correlation을 이용한 거리 계산
일반적으로 클러스터링에서 유클리드 거리(Euclidean distance)가 자주 사용되지만, 상관관계를 기준으로 클러스터링하고 싶다면 Pearson Correlation을 활용할 수 있습니다.
- Pearson Correlation은 두 변수 간의 선형 관계를 측정하며, 값의 범위는 -1에서 1 사이입니다.
- 상관 계수의 절대값이 1에 가까울수록 강한 상관관계를 의미합니다.
- 거리를 정의하기 위해 **1 - |correlation|**을 사용하여 상관 계수가 클수록 거리가 짧아지도록 설정합니다.
3. Python을 이용한 Agglomerative Clustering 구현
아래는 sklearn을 이용해 Pearson Correlation을 기반으로 Agglomerative Clustering을 수행하는 코드입니다.
import numpy as np import pandas as pd import scipy.cluster.hierarchy as sch import matplotlib.pyplot as plt from sklearn.cluster import AgglomerativeClustering def pearson_distance_matrix(data): """ Compute the Pearson correlation distance matrix using pandas. """ df = pd.DataFrame(data) corr_matrix = df.corr(method='pearson') dist_matrix = 1 - np.abs(corr_matrix.values) # 절대값을 취하여 높은 상관관계를 우선 클러스터링 return dist_matrix # 샘플 데이터 생성 np.random.seed(42) data = np.random.rand(10, 5) # 10개의 샘플, 5개의 특성 dist_matrix = pearson_distance_matrix(data) # 0.5보다 작은 값에 대해 무한대 처리하여 클러스터링에서 제외 dist_matrix[dist_matrix > 0.5] = np.inf np.fill_diagonal(dist_matrix, 0) # 클러스터 할당 (예: 3개의 클러스터) num_clusters = 3 clustering = AgglomerativeClustering(n_clusters=num_clusters, metric='precomputed', linkage='average') cluster_labels = clustering.fit_predict(dist_matrix) print("Cluster Labels:", cluster_labels)
코드 설명
- pearson_distance_matrix() 함수를 사용해 Pearson Correlation을 기반으로 한 거리 행렬을 생성합니다.
- 거리 행렬에서 0.5보다 작은 값을 np.inf로 설정하여 클러스터링에서 제외합니다.
- AgglomerativeClustering을 metric='precomputed' 옵션과 함께 사용하여, 미리 계산된 거리 행렬을 활용합니다.
- 결과적으로 각 데이터 포인트가 할당된 클러스터를 출력합니다.
4. 시각화 (덴드로그램)
클러스터링 결과를 시각화하기 위해 덴드로그램(dendrogram)을 그려볼 수도 있습니다.
# 계층적 클러스터링을 위한 링크 매트릭스 생성 linkage_matrix = sch.linkage(squareform(dist_matrix, checks=False), method='average') # 덴드로그램 시각화 plt.figure(figsize=(8, 5)) sch.dendrogram(linkage_matrix, labels=np.arange(len(data))) plt.title("Agglomerative Clustering with Pearson Correlation") plt.xlabel("Sample Index") plt.ylabel("Distance") plt.show()
5. 정리
- Agglomerative Clustering은 계층적 클러스터링 기법 중 하나로, 데이터를 유사도 기반으로 병합하는 방식입니다.
- Pearson Correlation을 이용하여 데이터 간 거리를 정의하고, 상관 계수가 높은 데이터들을 우선적으로 클러스터링할 수 있습니다.
- Python의 sklearn과 pandas를 활용하여 손쉽게 구현할 수 있으며, 덴드로그램을 통해 시각적으로 결과를 확인할 수도 있습니다.
728x90