[python] scikit-learn을 이용한 DBSCAN 군집화

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)은 데이터의 밀도를 기준으로 군집화하는 비지도 학습 알고리즘입니다. 이번 포스트에서는 DBSCAN 알고리즘을 scikit-learn을 이용하여 구현하는 방법에 대해 알아보겠습니다.

1. DBSCAN 알고리즘 개요

DBSCAN은 주어진 데이터 공간에서 데이터 밀도를 기준으로 군집을 형성합니다. 알고리즘은 아래와 같은 핵심 개념을 기반으로 동작합니다:

DBSCAN 알고리즘은 다음과 같은 단계로 동작합니다:

  1. 임의의 포인트에서 시작하여, 그 포인트의 주변에 있는 모든 이웃 포인트를 찾습니다.
  2. 이웃 포인트의 개수가 최소 데이터 포인트의 요구치를 만족하면, 해당 포인트는 핵심 포인트가 됩니다.
  3. 핵심 포인트를 중심으로 주변 반경 내에 있는 모든 포인트들을 군집화합니다. 이 때, 군집에 소속되지 못한 포인트들은 경계 포인트가 됩니다.
  4. 경계 포인트는 다른 군집에 소속될 수 있으며, 다른 군집의 핵심 포인트와 경계 포인트 사이에 연결 선이 생길 수 있습니다.
  5. 위 과정을 반복하여 모든 포인트를 군집화하며, 더 이상 새로운 핵심 포인트를 찾지 못할 때까지 진행합니다.

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 클래스의 생성자를 호출하여 모델을 생성합니다. 생성자의 인자로는 epsmin_samples를 전달하여 알고리즘의 매개변수를 설정합니다. 이후 fit 메서드를 호출하여 데이터를 학습시킵니다.

학습이 완료되면 labels_ 속성을 통해 각 데이터 포인트의 군집 레이블을 확인할 수 있습니다.

3. 참고 자료