[python] scikit-learn을 이용한 DBSCAN 군집화
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)은 데이터의 밀도를 기준으로 군집화하는 비지도 학습 알고리즘입니다. 이번 포스트에서는 DBSCAN 알고리즘을 scikit-learn을 이용하여 구현하는 방법에 대해 알아보겠습니다.
1. DBSCAN 알고리즘 개요
DBSCAN은 주어진 데이터 공간에서 데이터 밀도를 기준으로 군집을 형성합니다. 알고리즘은 아래와 같은 핵심 개념을 기반으로 동작합니다:
- 주변 반경(eps): 군집을 형성하기 위해 고려하는 데이터 포인트들의 최대 거리
- 최소 데이터 포인트(min_samples): 군집을 형성하기 위해 필요한 최소 데이터 포인트의 수
DBSCAN 알고리즘은 다음과 같은 단계로 동작합니다:
- 임의의 포인트에서 시작하여, 그 포인트의 주변에 있는 모든 이웃 포인트를 찾습니다.
- 이웃 포인트의 개수가 최소 데이터 포인트의 요구치를 만족하면, 해당 포인트는 핵심 포인트가 됩니다.
- 핵심 포인트를 중심으로 주변 반경 내에 있는 모든 포인트들을 군집화합니다. 이 때, 군집에 소속되지 못한 포인트들은 경계 포인트가 됩니다.
- 경계 포인트는 다른 군집에 소속될 수 있으며, 다른 군집의 핵심 포인트와 경계 포인트 사이에 연결 선이 생길 수 있습니다.
- 위 과정을 반복하여 모든 포인트를 군집화하며, 더 이상 새로운 핵심 포인트를 찾지 못할 때까지 진행합니다.
2. scikit-learn으로 DBSCAN 실행하기
scikit-learn은 데이터 과학 작업을 위한 파이썬 라이브러리로, 다양한 머신러닝 알고리즘을 제공합니다. DBSCAN 군집화를 위해서는 sklearn.cluster.DBSCAN
클래스를 사용할 수 있습니다.
아래는 scikit-learn을 이용하여 DBSCAN 군집화를 수행하는 간단한 예제 코드입니다:
from sklearn.cluster import DBSCAN
import numpy as np
# 데이터 준비
X = np.array([[1,2],[2,2],[2,3],[8,7],[8,8],[25,80]])
# 모델 생성 및 학습
dbscan = DBSCAN(eps=3, min_samples=2)
dbscan.fit(X)
# 예측 결과 출력
labels = dbscan.labels_
print("군집 레이블:", labels)
위 코드에서는 6개의 데이터 포인트를 생성한 후, DBSCAN
클래스의 생성자를 호출하여 모델을 생성합니다. 생성자의 인자로는 eps
와 min_samples
를 전달하여 알고리즘의 매개변수를 설정합니다. 이후 fit
메서드를 호출하여 데이터를 학습시킵니다.
학습이 완료되면 labels_
속성을 통해 각 데이터 포인트의 군집 레이블을 확인할 수 있습니다.
3. 참고 자료
- scikit-learn 공식 문서: DBSCAN