Menu
CoddyTech

K-Means w scikit-learn

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 4 z 51.

scikit-learn wykonuje za Ciebie całą pętlę k-means — tutaj dla 180 jabłek ocenionych pod względem słodyczy i chrupkości:

180 jabłek, słodycz na osi poziomej, a chrupkość na pionowej, podzielonych na trzy grupy, z czarną gwiazdką pośrodku każdej z nich: słodkie i chrupiące w prawym górnym rogu, miękkie na dole, kwaśne i chrupiące w lewym górnym rogu. Nowe jabłko w prawym górnym rogu dołącza do klastra 0

Dopasuj tylko do X, bez 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))

Wypisuje numery klastrów dla 8 wierszy, a następnie po jednym wierszu na każdy środek:

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

n_init=10 próbuje 10 początkowych ustawień i zachowuje to z najbardziej zwartymi skupieniami. km.predict([[8.6, 9.2]]) przypisuje nowe jabłko do najbliższego środka, [0].

labels = km.fit_predict(X) wykonuje obie czynności naraz: dopasowuje model, a następnie zwraca labels_.

Liczby są tylko nazwami: w przypadku innych danych klaster 0 może oznaczać dowolną grupę.

challenge icon

Wyzwanie

Łatwy

Biolog zarejestrował 150 nurkowań jednego humbaka: czas nurkowania i odpoczynek na powierzchni po nim. Czy istnieją różne rodzaje nurkowania? Kod początkowy przygotowuje wykres.

  1. Dopasuj KMeans do X: 3 klastry, n_init=10, random_state=0.
  2. Przedstaw każdy klaster jako osobną grupę, oznaczoną od cluster 0 do cluster 2.
  3. Oznacz środki czarnymi gwiazdkami, podpisanymi centers. Dodaj legendę i wyświetl wykres.

Tak wygląda to u innego wieloryba:

Wykres punktowy zatytułowany „Whale Dives”, z minutami nurkowania na osi poziomej i odpoczynkiem na powierzchni na osi pionowej: trzy klastry, krótkie nurkowania z długim odpoczynkiem w lewym górnym rogu, krótkie nurkowania z krótkim odpoczynkiem na dole, długie nurkowania po prawej, czarna gwiazdka w każdym klastrze i legenda

Coddy opisze twój wykres.

Spróbuj swoich sił

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

# Nie zmieniaj poniższych wierszy
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 nurkowań jednego humbaka: czas nurkowania i odpoczynku na powierzchni po nim, w minutach
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)")

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online