← AI 놀이터 홈으로

🔗 밀도 기반 군집화 (DBSCAN)

빽빽한 곳끼리 손잡고 번져 나가며 무리를 찾아요 — 고리 모양도 풀고, 잡음도 골라내고, 무리 개수도 스스로 정해요.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. k-means의 두 가지 아픔

k-평균 페이지에서 두 가지 한계를 봤어요. 첫째, 중심점에서의 거리로 나누니까 동그란 무리만 잘 찾고 고리·초승달 같은 모양은 망칩니다. 둘째, 몇 무리(k)인지 사람이 미리 정해야 해요. 오늘의 주인공 DBSCAN은 "점이 빽빽하게모인 곳이 무리다"라는 발상으로 둘 다 해결해요. 화면의 회색 점들이 데이터 — 아직 아무것도 실행하지 않은 상태입니다. 위쪽 버튼으로 데이터셋 3종을 갈아 끼울 수 있어요.
📂 데이터셋:

가운데 뭉치를 고리가 둘러싼 모양 — 평균 위치로 나누는 k-means는 절대 못 푸는 문제예요.

읽는 법: 가로·세로축은 두 가지 특징이에요. 실행하면 군집마다 색이 칠해지고(큰 원 = 핵심점, 작은 원 = 경계점), 어느 무리에도 못 낀 점은 회색 ✕(잡음). 마우스를 올리면 그 자리의 ε 반경 점선 원과 원 안 이웃 수가 보여요 — 초록이면 핵심점이 될 만큼 빽빽한 곳입니다. 볼 포인트: 색이 빽빽한 길을 따라서만 번져 나간다는 것!

🎛️ 밀도 기준 정하기

📊 지금 상태

찾은 군집 수 (자동!)
— (실행 전)
잡음 점 수
—
핵심점 수
—
전체 점 수
0개

k-means와 달리 군집 수를 미리 정하지 않았는데도 알아서 세어졌죠? ε과 minPts만 정하면 무리 개수는 데이터가 스스로 정해요.

🧪 이렇게 실험해 보세요

  1. 🌙 두 초승달에서 ε을 바꿔 가며 — 달 2개가 깨끗이 갈라지는 구간 찾기
  2. minPts를 8로 올리면? — 핵심점 기준이 깐깐해져 잡음이 늘어요
  3. 같은 데이터셋 버튼을 다시 눌러 새 데이터로 — 결과가 안정적인가요?

🧮 수식과 파이썬

핵심점 ⇔ |N_ε(x)| ≥ minPts
빽빽한 곳끼리 손잡고 번져 나가요. 무리 개수는 데이터가 스스로 정합니다
🐍 파이썬 코드로 보면? (펼치기)
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import DBSCAN

# 점 60개가 세 동네에 모여 있어요 — 군집 개수 k는 안 알려줘요!
X, _ = make_blobs(n_samples=60, centers=3, cluster_std=0.6, random_state=42)

model = DBSCAN(eps=0.8, min_samples=4)  # ε 반경, 최소 이웃 수
labels = model.fit_predict(X)           # 밀도 따라 번져 나가며 군집화

print(labels)                           # 군집 번호, -1은 잡음(noise)
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
print("군집 수:", n_clusters)           # 데이터가 스스로 정한 개수