Menu
CoddyTech

DBSCAN

Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 20번째.

이 장에서는 어떤 모양의 군집이든 찾아내고, 어느 군집에도 속하지 않는 점도 찾아냅니다. 이 장을 마칠 때쯤이면 계곡의 불빛을 지도로 나타내게 됩니다:

계곡의 야간 지도: 각기 다른 색과 마커로 표시된 길게 휘어진 마을, 둥근 마을, 작은 마을, 그리고 그 사이에 회색 x 표시로 나타낸 홀로 있는 불빛 10개

먼저, When K-Means Fails에서 k-means를 무너뜨린 바다표범들의 모래톱입니다. DBSCAN은 대신 무리를 따라갑니다:

두 개의 곡선형 모래톱에 있는 같은 바다표범 200마리를 보여 주는 차트 두 개. 왼쪽에서는 k-means가 바다표범들을 왼쪽 절반과 오른쪽 절반으로 나눕니다. 오른쪽에서는 DBSCAN이 각 모래톱을 온전하게 찾아내며, 바다표범 한 마리 주위에 eps라고 표시된 작은 원이 있습니다

eps 안에 점 자신을 포함해 min_samples개의 점이 있는 점은 군집에 속합니다. 군집은 이러한 점들을 통해 퍼져 나갑니다. 선택할 k는 없습니다:

from sklearn.cluster import DBSCAN
labels = DBSCAN(eps=0.2, min_samples=5).fit_predict(X)
print(labels.max() + 1)

이렇게 하면 2가 출력됩니다. 군중은 0부터 번호가 매겨지므로 가장 큰 번호에 1을 더하면 군중 수가 됩니다.

challenge icon

챌린지

중급

얼어붙은 호수에서 스케이터들이 두 섬 사이를 구불구불 지나가는 트랙을 따라 경주하고, 관중들은 하키 경기를 지켜봅니다. k-means는 트랙을 여러 조각으로 나눌 것입니다. 프로그램은 미터 단위의 eps를 읽습니다.

  1. 해당 eps와 min_samples=5로 DBSCAN을 학습시키고, 관중들을 labels에 저장하세요.
  2. 찾은 관중의 수를 출력하세요.
  3. draw_crowds(ax, X, labels)로 관중들을 그린 다음 표시하세요.

다른 호수에서 eps가 3.5일 때:

Crowds found: 3

Skaters on the Lake라는 제목의 차트: 150명의 스케이터가 파란색으로 표시된 구불구불한 S자 트랙을 따라 있고, 왼쪽 굽이 위쪽에는 주황색으로 표시된 30명의 둥근 무리, 오른쪽 굽이 아래쪽에는 초록색으로 표시된 22명의 무리가 있으며, 크기를 나타내는 범례가 있음

Coddy가 차트를 설명합니다. 그런 다음 eps를 8로 설정해 실행해 보세요. 관중들은 어디로 갔을까요?

직접 해보기

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

# 얼어붙은 호수에서 170명의 스케이터가 서 있던 위치, 단위는 미터
skaters = pd.read_csv("skaters.csv")
X = np.column_stack([skaters["x_m"], skaters["y_m"]])
eps = float(input())


# 각 무리를 서로 다른 색으로 그리고 무리의 크기를 표시합니다
def draw_crowds(ax, X, labels):
    for crowd in range(labels.max() + 1):
        rows = labels == crowd
        ax.scatter(X[rows, 0], X[rows, 1], s=14, label=f"{rows.sum()} skaters")
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Skaters on the Lake")
ax.set_xlabel("East (m)")
ax.set_ylabel("North (m)")

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

비지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러