Menu
CoddyTech

Wann K-Means scheitert

Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 14 von 51.

K-means stellt sich jeden Cluster als runde Wolke um seinen Mittelpunkt vor. Die Darts bilden eine Zielscheibe mit einem Ring darum, und K-means teilt sie in zwei Hälften:

Zwei Diagramme mit 140 Darts. Links die tatsächliche Verteilung: eine kompakte Zielscheibengruppe innerhalb eines breiten Rings. Rechts K-means mit k = 2: Eine gerade gestrichelte Grenze teilt die Scheibe, den Ring und die Zielmitte in eine linke und eine rechte Hälfte, jeweils mit einem Mittelpunktkreuz

Jeder Punkt wird seinem nächstgelegenen Zentrum zugeordnet, sodass die Grenze zwischen zwei Clustern eine gerade Linie genau auf halbem Weg zwischen den Zentren ist. Keine gerade Linie trennt einen Ring von seiner Mitte.

Lange, gekrümmte oder sehr ungleichmäßige Gruppen bringen k-means auf dieselbe Weise an seine Grenzen. Es gibt trotzdem Cluster zurück, also sieh dir immer die Darstellung an.

challenge icon

Aufgabe

Mittel

Eine Drohne entdeckte 200 Robben auf zwei gebogenen Sandbänken. Das Startgerüst zeigt die tatsächliche Verteilung im left-Diagramm.

  1. Gruppiere die Robben mit k-means, k = 2.
  2. Stelle im right-Diagramm jeden Cluster als Streudiagramm dar und beschrifte ihn mit cluster 0 oder cluster 1.
  3. Markiere die Zentren mit schwarzen "X"-Markierungen und beschrifte sie mit centers. Füge eine Legende hinzu und zeige das Diagramm an.

Coddy beschreibt dein Diagramm und zählt die Robben, die ihrer jeweiligen Sandbank zugeordnet wurden. So sieht es bei zwei Gruppen aus:

Zwei Diagramme. Links die tatsächliche Verteilung: eine große, weit verstreute Gruppe und rechts davon eine kleine, dicht gedrängte Gruppe. Rechts k-means mit k = 2: Der Cluster der kleinen Gruppe umfasst auch den rechten Rand der großen Gruppe, und schwarze Kreuze markieren die beiden Zentren

Probier es selbst

import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans

# 200 Robben ruhen auf zwei gekrümmten Sandbänken, aus einer Drohne betrachtet (Positionen in 100 m)
X, sandbar = make_moons(n_samples=200, noise=0.07, random_state=4)


# Zeichnet die tatsächlichen Sandbänke auf ax
def draw_truth(ax):
    ax.scatter(X[sandbar == 0, 0], X[sandbar == 0, 1], s=12, label="north bar")
    ax.scatter(X[sandbar == 1, 0], X[sandbar == 1, 1], s=12, label="south bar")
    ax.set_title("The truth")
    ax.legend()


fig, (left, right) = plt.subplots(1, 2, figsize=(9, 4))
draw_truth(left)
right.set_title("K-means, k = 2")

# 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