scikit-learn으로 K-Means
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 4번째.
scikit-learn은 단맛과 아삭함을 점수로 매긴 사과 180개를 대상으로 여기서 전체 k-평균 반복 과정을 수행합니다:
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이 어떤 그룹이든 될 수 있습니다.
챌린지
쉬움한 생물학자가 혹등고래 한 마리의 잠수 150회에 대해 잠수 시간과 잠수 후 수면 휴식 시간을 기록했습니다. 잠수 유형이 여러 가지일까요? 시작 코드는 차트를 설정합니다.
X에 KMeans를 적합합니다: 클러스터 3개,n_init=10,random_state=0.- 각 클러스터를 별도의 그룹으로 산점도로 표시하고,
cluster 0부터cluster 2까지 레이블을 붙입니다. - 중심을 검은색 별표로 표시하고
centers라는 레이블을 붙입니다. 범례를 추가하고 표시합니다.
다른 고래의 데이터로 만든 차트는 다음과 같습니다.
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)")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러