K-Means mit scikit-learn
Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 4 von 51.
scikit-learn führt die gesamte k-means-Schleife für dich aus, hier für 180 Äpfel, die nach Süße und Knackigkeit bewertet wurden:
Mit X allein fitten, ohne 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))Dies gibt die Clusternummern für 8 Zeilen aus, dann eine Zeile pro Zentrum:
[2 0 0 1 2 0 1 1]
[[7. 7.5]
[6. 3. ]
[2.9 8.1]]n_init=10 versucht 10 Startpunkte und behält den engsten bei. km.predict([[8.6, 9.2]]) ordnet den neuen Apfel seinem nächstgelegenen Zentrum zu, [0].
labels = km.fit_predict(X) erledigt beides auf einmal: Es passt das Modell an und gibt dann labels_ zurück.
Die Zahlen sind nur Namen: Bei anderen Daten kann Cluster 0 eine beliebige Gruppe sein.
Aufgabe
EinfachEin Biologe hat 150 Tauchgänge eines Buckelwals protokolliert: die Tauchzeit und die anschließende Ruhezeit an der Oberfläche. Gibt es verschiedene Arten von Tauchgängen? Die Vorlage richtet das Diagramm ein.
- Wende KMeans auf
Xan: 3 Cluster,n_init=10,random_state=0. - Stelle jedes Cluster als eigene Gruppe dar und beschrifte sie mit
cluster 0biscluster 2. - Markiere die Zentren mit schwarzen Sternen und beschrifte sie mit
centers. Füge eine Legende hinzu und zeige das Diagramm an.
So sieht es bei einem anderen Wal aus:
Coddy beschreibt dein Diagramm.
Probier es selbst
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# Ändere die folgenden Zeilen nicht
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 Tauchgänge eines Buckelwals: Tauchzeit und anschließende Ruhezeit an der Oberfläche, in Minuten
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)")
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Unüberwachtes Lernen
1Gruppen finden
Lernen ohne LabelsÄhnlichkeit messenK-Means von HandK-Means mit scikit-learnRückblick: Fitnessstudiomitglieder4Hierarchisches Clustering
Schrittweises ZusammenführenAgglomerative ModelleDendrogrammeZusammenfassung: Hunderassen7PCA in der Praxis
64 Dimensionen sehenKomponenten als MusterKomprimieren und rekonstruierenPCA vor einem ModellRückblick: Gesichtsscanner10Projekt: Ziffern erkunden
Die Ziffern ansehenMit PCA verkleinernDie Ziffern gruppierenDie Gruppen benennenDie Ausreißer finden2k wählen
TrägheitDie Elbow-MethodeSilhouettenwerteVor dem Clustering skalierenRückblick: LieferzonenÜbe selbstständig: Online-Python-Compiler