Menu
CoddyTech

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:

180 Äpfel, Süße auf der waagerechten und Knackigkeit auf der senkrechten Achse, in drei Gruppen mit einem schwarzen Stern in der Mitte jeder Gruppe: süß und knackig oben rechts, weich unten, säuerlich und knackig oben links. Ein neuer Apfel oben rechts kommt zu Cluster 0 hinzu

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.

challenge icon

Aufgabe

Einfach

Ein 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.

  1. Wende KMeans auf X an: 3 Cluster, n_init=10, random_state=0.
  2. Stelle jedes Cluster als eigene Gruppe dar und beschrifte sie mit cluster 0 bis cluster 2.
  3. 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:

Ein Streudiagramm mit dem Titel Whale Dives: Tauchzeit in Minuten auf der waagerechten Achse und Ruhezeit an der Oberfläche auf der senkrechten Achse: drei Cluster, kurze Tauchgänge mit langen Ruhezeiten links oben, kurze Tauchgänge mit kurzen Ruhezeiten unten, lange Tauchgänge rechts, jeweils mit einem schwarzen Stern und einer Legende

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
quiz iconTeste dich selbst

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

Übe selbstständig: Online-Python-Compiler