07.AI
머신러닝 - 군집 - DBSCAN - HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise)
Mr. Slumber
2025. 4. 13. 11:57
728x90
반응형
(개념) 밀도 기반 클러스터링 알고리즘인 DBSCAN을 확장한 것으로, 데이터 세트에서 클러스터 또는 밀집 영역을 찾기 위해 비지도 학습을 사용
- DBSCAN과 달리 HDBSCAN은 다양한 밀도를 가진 클러스터를 처리하고 자동으로 클러스터 수를 결정할 수 있다는 장점이 있다.
HDBSCAN과 DBSCAN 비교
특징 | DBSCAN | HDBSCAN |
클러스터링 방법론 | 고정된 밀도 임계값을 기반으로 클러스터 식별 | 계층적 접근 방식을 사용하여 다양한 밀도에서 클러스터 식별 |
파라미터 감도 | epsilon 및 minPts에 민감하고 신중한 선택 필요 | min_cluster_size 및 min_samples 사용 가능, 덜 민감 |
가변 밀도 | 균일한 밀도를 가정, 가변 밀도 데이터에서 어려움 | 다양한 밀도를 가진 클러스터 처리 가능 |
클러스터 예측 | 새 포인트 예측 불가능 | approximate_predict 함수로 새 포인트 예측 가능 |
복잡성 | 상대적으로 낮음 | 계산 복잡성이 더 높음 |
작동 원리
HDBSCAN은 데이터 포인트의 밀도 분포를 분석하여 클러스터를 식별한다. 주요 단계는 다음과 같다:
- 밀도 기반 클러스터링 계층 생성: 데이터 포인트 간의 밀도 연결성을 기반으로 클러스터를 생성하여 계층적 구조를 만든다. 이 과정은 데이터 포인트를 정점으로, 포인트 간의 상호 도달 가능 거리를 가중치로 하는 그래프를 생성하는 것으로 생각할 수 있다.
- 계층에서 클러스터 추출: 클러스터 할당의 안정성을 고려하여 계층에서 클러스터를 추출한다. 안정적인 클러스터는 여러 계층 수준에서 일관된 멤버십을 갖는 클러스터로 식별된다.
- 잡음(Noise)과 의미 있는 클러스터 구분: 밀도가 낮은 포인트 또는 어떤 클러스터에도 속하지 않는 포인트를 고려하여 잡음과 의미 있는 클러스터를 구별한다.
HDBSCAN 파라미터
HDBSCAN은 특정 데이터 세트에 맞게 클러스터링 프로세스를 수정하는 데 사용할 수 있는 여러 파라미터를 제공한다. 주요 파라미터는 다음과 같다:
- min_cluster_size: 클러스터를 형성하는 데 필요한 최소 포인트 수이다. 이 기준을 충족하지 못하는 포인트는 잡음으로 간주된다. 이 파라미터를 조정하면 알고리즘이 찾는 클러스터의 세분성에 영향을 미친다.
- min_samples: 포인트가 핵심 포인트로 간주되기 위해 이웃에 있어야 하는 최소 샘플 수이다.
- cluster_selection_epsilon: 최소 스패닝 트리를 기반으로 클러스터를 선택하기 위한 엡실론 값을 설정한다. 이는 밀도 기반 클러스터링 프로세스에서 포인트 간의 최대 허용 거리를 결정한다.
그 외 파라미터는 다음과 같다:
- metric: 상호 도달 가능 거리 계산에 사용할 거리 메트릭.
- cluster_selection_method: 응축 트리에서 클러스터를 선택하는 데 사용되는 방법 (예: 'eom', 'leaf').
- alpha: 클러스터 병합에 대한 연결 기준에 영향을 미치는 파라미터.
장점
- 사전 사양 없이 데이터 세트에서 클러스터 수를 자동으로 결정
- 볼록하지 않고 불규칙한 모양을 포함하여 다양한 모양과 크기의 클러스터 식별 가능
- 다양한 수준의 세분성으로 클러스터를 탐색할 수 있는 계층적 클러스터링 구조 제공
단점
- 최소 스패닝 트리 구성 및 상호 도달 가능 거리 계산으로 인해 특히 대규모 데이터 세트의 경우 계산 비용이 많이 들 수 있음.
- 사용되는 거리 메트릭은 클러스터링 결과에 영향을 미칠 수 있다.
- 최소 클러스터 크기 및 최소 샘플 파라미터에 대한 파라미터 조정이 필요하며, 이는 클러스터링 결과에 영향을 줄 수 있다.
HDBSCAN을 사용한 클러스터링 예제
다음은 Python에서 HDBSCAN을 구현하는 방법에 대한 예제이다:
import hdbscan
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score, adjusted_rand_score
# 샘플 데이터 생성
X, y_true = make_blobs(n_samples=1000, centers=5,
cluster_std=0.6, random_state=42)
# 추가 파라미터로 HDBSCAN 초기화
clusterer = hdbscan.HDBSCAN(min_cluster_size=5,
min_samples=5,
cluster_selection_method='eom',
allow_single_cluster=True,
metric='euclidean',
algorithm='best',
leaf_size=30)
# 모델을 데이터에 맞추기
clusterer.fit(X)
# 클러스터링 평가
labels = clusterer.labels_
silhouette_avg = silhouette_score(X, labels)
ari = adjusted_rand_score(y_true, labels)
# 평가 지표
print("실루엣 계수: {:.2f}".format(silhouette_avg))
print("조정된 Rand 지수: {:.2f}".format(ari))
# 클러스터 시각화
plt.figure(figsize=(10, 6))
plt.scatter(X[:, 0], X[:, 1], c=clusterer.labels_,
cmap='viridis', s=50, alpha=0.7, edgecolors='k')
plt.colorbar()
plt.title('HDBSCAN 클러스터링')
plt.xlabel('특성 1')
plt.ylabel('특성 2')
plt.show()
활용 사례
HDBSCAN은 다양한 영역에서 활용될 수 있다. 몇 가지 실질적인 예는 다음과 같다:
- 공간 데이터 분석: HDBSCAN은 GIS(지리 정보 시스템)에서 활동 또는 관심도가 높은 영역을 식별하는 데 사용할 수 있다.
- 이미지 처리: HDBSCAN은 이미지에서 객체 인식을 위한 뚜렷한 객체로 픽셀을 그룹화하는 데 도움이 될 수 있다.
- 이상 감지: HDBSCAN은 사기 탐지 또는 시스템 상태 모니터링에서 비정상적인 패턴을 분리하는 데 사용할 수 있다.
- 추천 시스템: HDBSCAN은 유사한 선호도를 가진 사용자를 그룹화하여 보다 정확한 추천을 생성할 수 있다.
- 텍스트 클러스터링: HDBSCAN은 짧은 텍스트에서 의도를 식별하기 위해 문장 임베딩을 클러스터링하는 데 사용할 수 있다.
- 원격 감지 기술: HDBSCAN은 위성 이미지에서 유사한 토지 사용 영역을 식별하는 데 사용할 수 있다.
- 천문학: HDBSCAN은 다양한 밀도를 가진 은하 분포를 분석하는 데 사용할 수 있다.
728x90