Menu
CoddyTech

Trägheit

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

In diesem Kapitel geht es darum, k zu wählen. Am Ende wirst du es für die Lieferungen einer Bäckerei auswählen und die Zonen auf einer Karte darstellen:

Eine Karte mit den Lieferstopps einer Stadt, Osten in km auf der waagerechten Achse und Norden in Metern auf der senkrechten Achse, aufgeteilt in drei Zonen mit 45, 40 und 25 Stopps, jeweils mit einem schwarzen Stern in der Mitte

Zuerst eine Kennzahl. Inertia summiert die quadrierten Abstände jedes Punkts zu seinem eigenen Zentrum: klein, wenn die Punkte dicht an ihren Zentren liegen.

36 Äpfel in drei Gruppen, jeder durch eine dünne graue Linie mit dem schwarzen Stern im Zentrum seiner Gruppe verbunden. Inertia quadriert die Länge jeder Linie und addiert alles zusammen

KMeans speichert ihn in inertia_. Für die 180 Äpfel:

for k in [1, 2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, round(km.inertia_))

Dies wird ausgegeben:

1 1718
2 752
3 230
4 196

Mehr Zentren, kürzere Speichen: Die Trägheit nimmt immer ab, wenn k wächst. Bei einem Zentrum pro Punkt beträgt sie 0, daher ist der kleinste Wert nicht der beste.

challenge icon

Aufgabe

Einfach

Eine Töpferei verpackt Vasen in Kartons, die es in einigen Größen gibt. Jede Vase kommt in den Karton mit der nächstliegenden Größe; die Inertia misst, wie schlecht sie hineinpassen. Das Programm liest budget, also die größte Abweichung, die die Töpferei akzeptiert.

  1. Probiere k = 1, 2, 3 und so weiter aus: Passe KMeans an vases an und gib die Inertia für jedes k gerundet aus.
  2. Stoppe beim ersten k, dessen Inertia innerhalb des Budgets liegt, und gib es aus.

Für eine andere Töpferei:

k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3

Probier es selbst

import numpy as np
from sklearn.cluster import KMeans

# Ändere die folgenden Zeilen nicht
rng = np.random.default_rng(8)
# Vier Arten von Vasen: typische Höhe und Breite in cm sowie die jeweilige Anzahl
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
    parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 Vasen, je eine Zeile: Höhe und Breite in cm
vases = np.round(np.concatenate(parts), 1)

# Die größte Abweichung, als Inertia gemessen, die die Töpferei akzeptiert
budget = int(input())

# 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