Menu
CoddyTech

K-Means가 실패하는 경우

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

K-means는 각 클러스터를 중심 주위의 둥근 덩어리로 표현합니다. 다트는 중앙에 고리 모양의 링이 있는 과녁을 만들지만, k-means는 이를 반으로 나눕니다:

다트 140개의 차트 두 개. 왼쪽은 실제 분포: 넓은 링 안에 빽빽한 과녁 중앙 그룹이 있다. 오른쪽은 k = 2인 k-means: 곧은 점선 경계가 과녁판, 링, 과녁 중앙을 왼쪽 절반과 오른쪽 절반으로 나누며, 각 절반에는 중심 표시가 있다

각 점은 가장 가까운 중심에 연결되므로, 두 군집 사이의 경계는 두 중심의 정중앙을 지나는 직선입니다. 고리와 그 가운데를 가르는 직선은 없습니다.

길고 구부러졌거나 매우 불균일한 그룹도 같은 방식으로 k-means를 망가뜨립니다. 그래도 군집을 반환하므로 항상 그림을 확인하세요.

challenge icon

챌린지

중급

드론이 두 개의 곡선형 모래톱에서 물개 200마리를 발견했습니다. 시작 코드는 left 패널에 실제 분포를 그립니다.

  1. k-means로 물개를 군집화하세요. k = 2입니다.
  2. right 패널에 각 군집을 산점도로 표시하고, cluster 0 또는 cluster 1이라는 레이블을 붙이세요.
  3. 중심점을 검은색 "X" 마커로 표시하고 centers라는 레이블을 붙이세요. 범례를 추가한 다음 그래프를 표시하세요.

Coddy가 차트를 설명하고 각 물개가 원래 모래톱에 속한 물개 수를 세어 줍니다. 두 무리의 경우 다음과 같습니다.

두 개의 차트. 왼쪽은 실제 분포로, 넓게 퍼진 큰 무리와 그 오른쪽에 있는 작고 밀집된 무리를 보여 줍니다. 오른쪽은 k = 2인 k-means로, 작은 무리의 군집이 큰 무리의 오른쪽 가장자리도 포함하며, 검은색 십자 표시가 두 중심점을 나타냅니다.

직접 해보기

import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans

# 드론으로 본, 굽은 모래톱 두 곳에서 쉬고 있는 물개 200마리 (위치 단위: 100 m)
X, sandbar = make_moons(n_samples=200, noise=0.07, random_state=4)


# ax에 실제 모래톱을 그립니다
def draw_truth(ax):
    ax.scatter(X[sandbar == 0, 0], X[sandbar == 0, 1], s=12, label="north bar")
    ax.scatter(X[sandbar == 1, 0], X[sandbar == 1, 1], s=12, label="south bar")
    ax.set_title("The truth")
    ax.legend()


fig, (left, right) = plt.subplots(1, 2, figsize=(9, 4))
draw_truth(left)
right.set_title("K-means, k = 2")

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

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

비지도 학습의 모든 레슨

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