K-Means von Hand
Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 3 von 51.
K-Means wiederholt eine Runde aus zwei Schritten, um k Cluster zu finden. Zuordnen: Jeder Punkt wird seinem nächstgelegenen Zentrum zugeordnet. Verschieben: Jedes Zentrum wandert zum Mittelwert seiner Punkte. Drei Eiswagen:
Eine Runde in NumPy, wobei dists eine Abstandstabelle mit einer Spalte pro Zentrum ist:
labels = dists.argmin(axis=1) # zuweisen
for c in range(k):
centers[c] = X[labels == c].mean(axis=0) # verschiebenargmin(axis=1) gibt für jede Zeile die Spalte mit dem kleinsten Wert an: ihr nächstes Zentrum. Runde für Runde stabilisieren sich die Zentren; wenn sich keines mehr bewegt, ist k-Means abgeschlossen.
Aufgabe
EinfachEin T-Shirt-Hersteller passt seine Größen S, M und L an die Kundschaft von heute an. Die alte Größentabelle gibt die Startzentren vor, distances(people, centers) liefert die Abstandstabelle, und das Programm liest ein, wie viele Runden ausgeführt werden sollen.
- In jeder Runde: Weise jede Person zu und verschiebe dann jedes Zentrum.
- Gib das Zentrum jeder Größe und die Anzahl der Personen aus, die ihr in der letzten Runde zugewiesen wurden, wie unten gezeigt.
Für einen anderen Hersteller:
Rounds run: 2
S: chest 87.3 cm, length 65.1 cm, 14 people
M: chest 95.0 cm, length 68.9 cm, 31 people
L: chest 104.8 cm, length 72.6 cm, 45 peopleProbier es selbst
import numpy as np
# Ändere die folgenden Zeilen nicht
rng = np.random.default_rng(12)
chest = np.concatenate([rng.normal(88, 3, 30), rng.normal(98, 3.5, 35), rng.normal(110, 4, 25)])
length = np.concatenate([rng.normal(66, 1.8, 30), rng.normal(70, 2, 35), rng.normal(75, 2.2, 25)])
# 90 Kunden, jeweils eine Zeile: Brustumfang und Länge in cm
people = np.round(np.column_stack([chest, length]), 1)
# Die alte Größentabelle legt die Startpunkte der Zentren fest: S, M, L
sizes = ["S", "M", "L"]
centers = np.array([[85.0, 64.0], [90.0, 67.0], [96.0, 69.0]])
rounds = int(input())
# Abstandstabelle: eine Zeile pro Person, eine Spalte pro Zentrum
def distances(X, centers):
table = np.zeros((len(X), len(centers)))
for c in range(len(centers)):
table[:, c] = np.sqrt(((X - centers[c]) ** 2).sum(axis=1))
return table
# 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