DBSCAN
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 20번째.
이 장에서는 어떤 모양의 군집이든 찾아내고, 어느 군집에도 속하지 않는 점도 찾아냅니다. 이 장을 마칠 때쯤이면 계곡의 불빛을 지도로 나타내게 됩니다:
먼저, When K-Means Fails에서 k-means를 무너뜨린 바다표범들의 모래톱입니다. DBSCAN은 대신 무리를 따라갑니다:
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을 더하면 군중 수가 됩니다.
챌린지
중급얼어붙은 호수에서 스케이터들이 두 섬 사이를 구불구불 지나가는 트랙을 따라 경주하고, 관중들은 하키 경기를 지켜봅니다. k-means는 트랙을 여러 조각으로 나눌 것입니다. 프로그램은 미터 단위의 eps를 읽습니다.
- 해당 eps와
min_samples=5로 DBSCAN을 학습시키고, 관중들을labels에 저장하세요. - 찾은 관중의 수를 출력하세요.
draw_crowds(ax, X, labels)로 관중들을 그린 다음 표시하세요.
다른 호수에서 eps가 3.5일 때:
Crowds found: 3Coddy가 차트를 설명합니다. 그런 다음 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)")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러