Die Elbow-Methode
Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 7 von 51.
Trage die Trägheit gegen k auf. Solange jedes neue Zentrum eine echte Gruppe aufteilt, sinkt die Trägheit stark; dann flacht die Kurve ab. Der Knick, der Elbow, ist ein guter Wert für k:
Als Faustregel gilt: Hör auf, wenn ein weiteres Zentrum die inertia_ um weniger als ein Viertel verringert. Die Verringerungen bei den Äpfeln: 56 %, dann 69 %, dann nur 15 %. Also k = 3:
ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")Eine sanfte Kurve ohne Knick bedeutet, dass es keine klaren Gruppen gibt. Die nächste Lektion bringt einen zweiten Beurteiler ins Spiel.
Aufgabe
EinfachEine Pflanzen-App sortiert Zimmerpflanzen nach ihrem Licht- und Wasserbedarf in Pflegepläne. Der Starter enthält Trägheitswerte für k from 1 to 8, ein Diagramm und cutoff.
- Erhöhe k ausgehend von 1 und stoppe dort, wo das nächste k die Trägheit um weniger als
cutoffverringert. Gib dieses k aus. - Stelle die Trägheit in Abhängigkeit von k mit Punkten dar, zeichne bei deinem k eine gestrichelte vertikale Linie und zeige das Diagramm an.
Für eine andere App, cutoff 0.25:
Care plans: 3Anschließend beschreibt Coddy 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(17)
# Vier Pflanzenarten: typischer Licht- und Wasserbedarf sowie die jeweilige Anzahl
kinds = [(8.5, 2, 35), (2.5, 7.5, 30), (5, 5, 30), (8, 8, 25)]
parts = []
for l, w, n in kinds:
parts.append(np.column_stack([rng.normal(l, 0.8, n), rng.normal(w, 0.8, n)]))
# 120 Zimmerpflanzen, jeweils eine Zeile: Licht- und Wasserbedarf, bewertet von 1 bis 10
plants = np.clip(np.round(np.concatenate(parts), 1), 1, 10)
# Trägheit für k = 1 bis 8, aus Inertia
ks = list(range(1, 9))
inertias = []
for k in ks:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(plants)
inertias.append(km.inertia_)
cutoff = float(input())
fig, ax = plt.subplots()
ax.set_title("Elbow: Care Plans")
ax.set_xlabel("k")
ax.set_ylabel("Inertia")
# Schreibe deinen Code darunter
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