Menu
CoddyTech

Dendrogramme

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

Der einleitende Baum des Kapitels ist ein Dendrogramm. Jede Klammer verbindet zwei Gruppen auf der Höhe, an der sie zusammengeführt wurden: Je länger ihre Schenkel sind, desto weiter lagen die Gruppen auseinander.

Schneide ihn mit einer Linie, und jeder Ast, den die Linie kreuzt, wird zu einer Gruppe. Hier sind es 4:

Der Sportball-Baum mit einer gestrichelten Linie auf Höhe 1.2. Darunter vier Gruppen: Softball, Cricket und Baseball; Tennis, Tischtennis und Golf; Basketball allein; Volleyball, Handball und Fußball

scipy erstellt den Baum, zeichnet ihn und schneidet ihn mit fcluster:

from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
Z = linkage(scaled, "ward")
dendrogram(Z, labels=names, leaf_rotation=90, color_threshold=1.2, ax=ax)
ax.axhline(1.2, color="gray", linestyle="--")
groups = fcluster(Z, t=1.2, criterion="distance")
print(groups)

Dies gibt eine Gruppennummer pro Ball aus, nur für den Basketball:

[2 2 2 1 1 1 3 3 3 4]

Schneide die längsten Beine: Die Gruppen unten liegen weit auseinander.

challenge icon

Aufgabe

Mittel

Ein Meeresführer gruppiert 16 Wale und Delfine nach Länge, Gewicht und Tauchtiefe. Das Startgerüst skaliert sie und liest die Schnitthöhe cut ein.

  1. Erstelle den Ward-Baum Z und zeichne ihn auf ax: Tiernamen um 90 Grad gedreht, Farben enden an der Schnittlinie.
  2. Zeichne die Schnittlinie als graue gestrichelte Linie und zeige sie dann an.
  3. Gib die Anzahl der Gruppen aus.

Für 11 Früchte und einen Schnitt bei 3.5:

Cut at 3.5: 3 groups

Ein Baum mit dem Titel Früchte, dessen Blattnamen nach oben verlaufen, und eine graue gestrichelte Linie auf Höhe 3.5, die drei farbige Äste kreuzt: Zitrone, Limette und Erdbeere; Orange, Grapefruit und Mango; Weintraube, Kirsche, Banane, Apfel und Birne

Coddy beschreibt deinen Baum.

Probier es selbst

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster

# 16 Wale und Delfine: Körperlänge (m), Gewicht (Tonnen), tiefster Tauchgang (m)
whales = pd.read_csv("whales.csv")
names = list(whales["animal"])
scaled = StandardScaler().fit_transform(whales[["length_m", "weight_t", "dive_m"]])
cut = float(input())

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.3)  # Platz für die Namen unter dem Baum
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")

# 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