Menu
CoddyTech

scikit-learn으로 K-Means

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

scikit-learn은 단맛과 아삭함을 점수로 매긴 사과 180개를 대상으로 여기서 전체 k-평균 반복 과정을 수행합니다:

사과 180개. 가로축은 단맛, 세로축은 아삭함이며, 세 그룹 각각의 중심에 검은색 별표가 있습니다. 오른쪽 위에는 달고 아삭한 사과, 아래쪽에는 무른 사과, 왼쪽 위에는 시고 아삭한 사과가 모여 있습니다. 오른쪽 위에 있는 새 사과는 클러스터 0에 합류합니다.

X만 사용해 적합시키고 y는 사용하지 않습니다:

from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
print(km.labels_[:8])
print(km.cluster_centers_.round(1))

이것은 8개 행의 클러스터 번호를 출력한 다음, 각 중심마다 한 행씩 출력합니다:

[2 0 0 1 2 0 1 1]
[[7.  7.5]
 [6.  3. ]
 [2.9 8.1]]

n_init=10은 10개의 시작점을 시도하고 가장 조밀한 것을 선택합니다. km.predict([[8.6, 9.2]])는 새 사과에 가장 가까운 중심인 [0]을 반환합니다.

labels = km.fit_predict(X)는 두 작업을 한 번에 수행합니다. 먼저 모델을 학습시킨 다음 labels_를 반환합니다.

숫자는 단지 이름일 뿐입니다. 다른 데이터에서는 클러스터 0이 어떤 그룹이든 될 수 있습니다.

challenge icon

챌린지

쉬움

한 생물학자가 혹등고래 한 마리의 잠수 150회에 대해 잠수 시간과 잠수 후 수면 휴식 시간을 기록했습니다. 잠수 유형이 여러 가지일까요? 시작 코드는 차트를 설정합니다.

  1. X에 KMeans를 적합합니다: 클러스터 3개, n_init=10, random_state=0.
  2. 각 클러스터를 별도의 그룹으로 산점도로 표시하고, cluster 0부터 cluster 2까지 레이블을 붙입니다.
  3. 중심을 검은색 별표로 표시하고 centers라는 레이블을 붙입니다. 범례를 추가하고 표시합니다.

다른 고래의 데이터로 만든 차트는 다음과 같습니다.

Whale Dives라는 제목의 산점도. 가로축은 잠수 시간(분), 세로축은 수면 휴식 시간이며, 클러스터 3개가 표시되어 있습니다. 왼쪽 위에는 짧은 잠수와 긴 휴식, 아래쪽에는 짧은 잠수와 짧은 휴식, 오른쪽에는 긴 잠수가 있습니다. 각 클러스터에 검은색 별표가 하나씩 있고 범례가 있습니다.

Coddy가 차트를 설명합니다.

직접 해보기

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 아래 줄은 변경하지 마세요
rng = np.random.default_rng(14)
dive = np.concatenate([rng.normal(4, 1.0, 60), rng.normal(12, 2.0, 50), rng.normal(2.5, 0.7, 40)])
rest = np.concatenate([rng.normal(1.5, 0.5, 60), rng.normal(4, 1.0, 50), rng.normal(8, 1.5, 40)])
# 혹등고래 한 마리의 잠수 150회: 잠수 시간과 각 잠수 후 수면에서 쉰 시간(분 단위)
X = np.round(np.clip(np.column_stack([dive, rest]), 0.5, None), 1)

fig, ax = plt.subplots()
ax.set_title("Whale Dives")
ax.set_xlabel("Dive (min)")
ax.set_ylabel("Surface rest (min)")

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

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

비지도 학습의 모든 레슨

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