Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Daten ohne Etiketten gruppieren (k-means)

Nach dieser Lektion: Ich kann Daten ohne Etiketten mit k-means gruppieren.

Lektion, 50 Min.2 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Arten von Tagen, die niemand benannt hat

Der Verleih will drei Dienstpläne: einen für ruhige Tage, einen für normale und einen für Ansturmtage. Niemand hat je einen Tag als ruhig oder als Ansturm markiert.

Es gibt keine Antwortspalte zum Lernen. Die Tage müssen sich selbst in Gruppen ordnen, und Sie müssen beurteilen, ob die Gruppen Sinn ergeben.

Am Ende dieser Lektion

Notiz

Ich kann Daten ohne Etiketten mit k-means gruppieren.

Schlüsselwörter

BegriffWas er bedeutet
Daten ohne EtikettenZeilen ohne Antwortspalte
Clustereine Gruppe von Zeilen, die nah beieinander liegen
Zentroidder mittlere Punkt eines Clusters
k-meansein Verfahren, das k Zentroide verschiebt, bis die Gruppen gleich bleiben
Skalierenallen Merkmalen vor dem Messen dieselbe Streuung geben
Inertiadie Summe der quadrierten Abstände jedes Punktes zu seinem Zentroid

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

k-means wiederholt zwei Schritte

Wählen Sie k, die Zahl der Gruppen. Setzen Sie k Zentren irgendwo zwischen die Punkte.

Dann wiederholen Sie zwei Schritte. Geben Sie jeden Punkt seinem nächsten Zentrum. Schieben Sie jedes Zentrum zum Mittelwert seiner Punkte, dadurch wird es zum Zentroid. Hören Sie auf, wenn kein Punkt mehr die Gruppe wechselt. Andere Startplätze können andere Gruppen ergeben, deshalb probiert scikit-learn mehrere und behält die beste.

Ein Schritt von Hand

Code: python
# Ein Schritt von k-means an sechs Tagen, nur nach Ausleihen.
tage = [100, 130, 190, 280, 340, 430]
zentren = [100, 400]

gruppen = [[], []]
for wert in tage:
    if abs(wert - zentren[0]) <= abs(wert - zentren[1]):
        gruppen[0].append(wert)
    else:
        gruppen[1].append(wert)
print("Gruppen:", gruppen)
for n in range(2):
    zentren[n] = sum(gruppen[n]) / len(gruppen[n])
print("neue Zentren:", zentren)
# Führen Sie den Schritt von den neuen Zentren aus erneut aus.
# Wechselt ein Tag die Gruppe?

Vor dem Messen skalieren

Die Ausleihen reichen von 41 bis 487 am Tag. Die Temperaturen reichen von etwa -1 bis 25 Grad. 10 Ausleihen Unterschied sind winzig, 10 Grad Unterschied sind riesig.

Ein Abstand behandelt aber beide Zehner gleich. Ohne Skalieren entscheiden also die Ausleihen alles. StandardScaler gibt jedem Merkmal den Mittelwert 0 und dieselbe Streuung, damit jedes fair zählt.

Im Notebook eingeben: ohne Skalieren

Code: python
import pandas as pd
from sklearn.cluster import KMeans

ausleihen = pd.read_csv("hires.csv")
# Ohne Skalieren: Ausleihen streuen über Hunderte, Temperaturen über etwa 26.
ausleihen["roh"] = KMeans(n_clusters=3, n_init=10, random_state=0).fit_predict(ausleihen[["temp_c", "hires"]])
ausleihen.groupby("roh")[["temp_c", "hires"]].agg(["min", "max"])

Die Tage skaliert gruppieren

Befehl
docker exec jupyter python3 steps/kmeans.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, k-means finde heraus, wie viele Gruppen die Daten wirklich haben. Es liefert immer genau die k Gruppen, um die Sie bitten, auch aus Daten ganz ohne Gruppen. Die Wahl von k und der Name jeder Gruppe sind Ihr Urteil.

Der Knick hilft bei der Wahl von k

Die Inertia ist die Summe der quadrierten Abstände jedes Punktes zu seinem Zentroid. Mehr Gruppen senken sie immer. Mit einer Gruppe je Punkt erreicht sie 0.

Suchen Sie deshalb den Knick: das k, ab dem eine weitere Gruppe kaum noch etwas bringt. Fragen Sie dann, ob die Gruppen dem Verleih nützen.

Die Streuung für k von 1 bis 6

Befehl
docker exec jupyter python3 steps/elbow.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Im Notebook eingeben: die Gruppen sehen

Code: python
from sklearn.preprocessing import StandardScaler

skaliert = StandardScaler().fit_transform(ausleihen[["temp_c", "hires"]])
ausleihen["gruppe"] = KMeans(n_clusters=3, n_init=10, random_state=0).fit_predict(skaliert)
# Eine Farbe je Gruppe.
ausleihen.plot.scatter(x="temp_c", y="hires", c="gruppe", colormap="viridis")

Weiterführend: drei Merkmale

Gruppieren Sie in Ihrem Notebook nach drei Merkmalen: Temperatur, Regen und Ausleihen, alle skaliert. Probieren Sie k = 3 und k = 4.

Geben Sie für jede Gruppe ihre Größe und den Mittelwert jedes Merkmals aus. Geben Sie jeder Gruppe einen Namen, den eine Dienstplanung versteht, und sagen Sie, welches k Sie wählen und warum.

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.