Weiter zum Inhalt

Einführung in hierarchisches Clustering in Python

Verstehe die Feinheiten des hierarchischen Clustering und seine Umsetzung in Python
Aktualisiert 18. Sept. 2026  · 13 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Hierarchical Clustering Python Tutorial

Motivation

Stell dir vor, du bist Data Scientist in einem Einzelhandelsunternehmen. Deine Chefin bittet dich, Kundinnen und Kunden anhand ihres Ausgabeverhaltens für zielgerichtetes Marketing und Produktempfehlungen in folgende Gruppen zu segmentieren: Low, Average, Medium oder Platinum.

Da es zu diesen Kundinnen und Kunden keine entsprechenden historischen Labels gibt, wie lässt sich eine sinnvolle Einteilung vornehmen?

Hier kommt Clustering ins Spiel. Es ist eine Methode des unüberwachten Lernens, mit der unbeschriftete Daten in ähnliche Gruppen zusammengefasst werden.

In diesem Tutorial konzentrieren wir uns auf hierarchisches Clustering, eine von vielen Techniken im unüberwachten Lernen. Wir starten mit einem Überblick, was hierarchisches Clustering ist, und vergleichen es anschließend mit anderen Verfahren.

Danach führen wir dich Schritt für Schritt durch die Umsetzung in Python mit der beliebten Scipy-Bibliothek.

Definition von hierarchischem Clustering

Beim hierarchischen Clustering werden sukzessive Cluster gebildet, die auf zuvor definierten Clustern aufbauen. Ziel ist es, die Daten als Baumstruktur von Clustern (Dendrogramm) zu organisieren, die die hierarchischen Beziehungen zwischen den zugrunde liegenden Clustern grafisch darstellt.

Vergleich: Hierarchisches Clustering und andere Verfahren

Hierarchisches Clustering ist ein leistungsfähiger Ansatz, aber nicht der einzige. Jedes Clustering-Verfahren bringt eigene Stärken und Schwächen mit.

Schauen wir uns an, wie es im Vergleich zu K-Means und modellbasiertem Clustering abschneidet. Es gibt viele weitere Methoden, doch diese beiden sind neben hierarchischem Clustering weit verbreitet und helfen, die anderen besser einzuordnen.

Mehr zu Clustering im Machine Learning erfährst du in unserem separaten Artikel mit fünf wichtigen Clustering-Algorithmen.

Hierarchisches Clustering vs. K-Means

Im Unterschied zum hierarchischen Verfahren teilt K-Means die ursprünglichen Datenpunkte in „K“ Gruppen bzw. Cluster ein, wobei „K“ im Vorfeld festgelegt wird.

Die Grundidee: Es werden Cluster gesucht, die die quadrierte euklidische Distanz aller Punkte zu ihren Zentren über alle Merkmale hinweg minimieren. Die Zuordnung erfolgt iterativ.

Unser Tutorial K-means Clustering in Python mit Scikit-learn erklärt dir die inneren Abläufe von K-Means anhand einer spannenden Fallstudie.

Vorteile

  • Rechnerisch effizienter als hierarchisches Clustering und dadurch für große Datensätze geeignet.
  • K-Means ist einfacher zu verstehen und umzusetzen.

Nachteile

  • Weniger flexibel als hierarchisches Clustering, da die Anzahl der Cluster vorab festgelegt werden muss, was oft nicht offensichtlich ist.
  • Die Ergebnisse sind instabil und können sich zwischen Läufen auf demselben Datensatz unterscheiden.
  • Empfindlicher gegenüber Ausreißern, da diese den Cluster-Mittelwert beeinflussen.
  • Sowohl K-Means als auch hierarchisches Clustering können kategoriale Daten nicht direkt verarbeiten und funktionieren bei nicht kontinuierlichen Daten oder sehr hoher Varianz oft schlechter.

Trotz seiner Grenzen ist K-Means wegen der einfachen Nutzung und Effizienz weiterhin sehr beliebt und dient häufig als Referenz zum Vergleich anderer Clustering-Techniken.

Modellbasiertes Clustering

Sowohl K-Means als auch hierarchisches Clustering arbeiten mit Distanzmatrizen, die die Abstände zwischen allen Punkten im Datensatz abbilden. Modellbasiertes Clustering nutzt dagegen statistische Modelle, um Cluster in den Daten zu identifizieren. Der grobe Ablauf:

  • Statistisches Modell wählen und die Anzahl der Cluster festlegen.
  • Modell auf die Daten fitten.
  • Cluster anhand der Modellparameter bestimmen.

Vorteile

  • Flexibler als hierarchisches Clustering, da unterschiedliche Modelle für verschiedene Clustertypen einsetzbar sind.
  • Besser geeignet für Daten mit komplexen Formen oder Strukturen.

Nachteile

  • Rechnerisch aufwendiger als hierarchisches Clustering, besonders bei großen Datenmengen.
  • Erfordert ein gutes Verständnis statistischer Modellierung, da die Modellwahl das Ergebnis stark beeinflusst.
  • Wie K-Means muss auch hier die Anzahl der Cluster vorab festgelegt werden.

Anwendungsfelder des hierarchischen Clustering

Hierarchisches Clustering findet in vielen Bereichen unseres Alltags Anwendung, unter anderem in Biologie, Bildverarbeitung, Marketing, Volkswirtschaft und der Analyse sozialer Netzwerke.

Biologie

Die Clusterung von DNA-Sequenzen zählt zu den größten Herausforderungen in der Bioinformatik.

Biologinnen und Biologen können hierarchisches Clustering nutzen, um genetische Beziehungen zwischen Organismen zu analysieren und diese in taxonomische Gruppen einzuordnen. Das erleichtert die schnelle Analyse und Visualisierung der zugrunde liegenden Zusammenhänge.

Bildverarbeitung

In der Bildverarbeitung lässt sich hierarchisches Clustering einsetzen, um ähnliche Regionen oder Pixel eines Bildes nach Farbe, Intensität oder anderen Merkmalen zu gruppieren. Das ist nützlich für Aufgaben wie Segmentierung, Klassifikation und Objekterkennung.

Marketing

Marketing-Teams können mit hierarchischem Clustering eine Hierarchie verschiedener Kundentypen nach Kaufverhalten ableiten und so bessere Strategien und Empfehlungen entwickeln. Beispielsweise lassen sich je nach Ausgabenniveau unterschiedliche Produkte empfehlen.

Analyse sozialer Netzwerke

Soziale Netzwerke sind bei richtiger Auswertung eine wertvolle Informationsquelle. Hierarchisches Clustering hilft, Gruppen oder Communities zu erkennen, ihre Beziehungen zu verstehen und die Struktur des Netzwerks als Ganzes zu analysieren.

Der Algorithmus des hierarchischen Clustering

In diesem Abschnitt betrachten wir drei Kernaspekte: die einzelnen Schritte des Algorithmus, die beiden Varianten (agglomerativ und divisiv) sowie die Wahl der passenden Distanzmaße.

Schritte im hierarchischen Clustering

Der Algorithmus basiert auf Distanzen, um Cluster zu erzeugen. Der Prozess umfasst im Wesentlichen:

Creating Hierarchical Clustering Algorithm

Bereite die Daten auf, indem du fehlende Werte entfernst und weitere Bereinigungsschritte vornimmst. Dieser Schritt ist bei den meisten Machine-Learning-Aufgaben üblich.

1. Berechne die Distanzmatrix mit den Abständen zwischen allen Datenpunkt-Paaren anhand eines Distanzmaßes wie euklidische Distanz, Manhattan-Distanz oder Kosinus-Ähnlichkeit. Standard ist meist die euklidische Distanz.

2. Fasse die beiden Cluster mit der geringsten Distanz zusammen.

3. Aktualisiere die Distanzmatrix in Bezug auf die neuen Cluster.

4. Wiederhole die Schritte 1, 2 und 3, bis alle Cluster zu einem einzigen Cluster verschmolzen sind.

Beispiele für hierarchisches Clustering

Agglomeratives und divisives Clustering sind gewissermaßen Spiegelbilder. Schauen wir uns an, wie beide arbeiten, mit Beispiel und Visualisierung.

Agglomeratives hierarchisches Clustering

Dieses Szenario entspricht dem oben beschriebenen Ansatz. Zunächst gilt jede Beobachtung als eigener Singleton-Cluster (nur ein Datenpunkt). Anschließend werden Cluster iterativ zusammengeführt, bis ein einziger Cluster entsteht. Man spricht auch vom Bottom-up-Ansatz.

Wie in der folgenden Abbildung gezeigt:

  • Wir starten damit, jedes Tier als eigenen Cluster zu betrachten.
  • Dann bilden wir anhand von Ähnlichkeiten drei Cluster aus diesen Einzeltieren:
    • Vögel: Adler und Pfau
    • Säugetiere: Löwe und Bär
    • Mehr als drei Beine: Spinne und Skorpion.
  • Wir führen die beiden ähnlichsten Cluster zusammen und bilden so die Wirbeltiere: Vögel und Säugetiere.
  • Zum Schluss werden die verbleibenden Cluster Wirbeltiere und Mehr als drei Beine zu einem einzigen Cluster Tiere zusammengeführt.

Dendrogram of Agglomerative Clustering Approach

Dendrogramm des agglomerativen Ansatzes

Divisives Clustering

Das divisive Clustering arbeitet Top-down: Es beginnt mit allen Datenpunkten in einem einzigen Cluster und teilt diesen schrittweise, bis nur noch Einzelpunkte übrig sind.

In der Grafik zum divisiven Ansatz:

  • Der gesamte Tierdatensatz wird zunächst als ein Block betrachtet.
  • Dann teilen wir in zwei Cluster: Wirbeltiere und Mehr als 3 Beine.
  • Die Teilung wird iterativ auf die neu entstandenen Cluster angewandt, bis einzelne Tiere entstehen.

Dendrogram of Divisive Clustering Approach

Dendrogramm des divisiven Ansatzes

Die richtige Distanz wählen

Die Wahl des Distanzmaßes ist entscheidend und hängt von deiner Problemstellung ab. Beispiel: Wir könnten Studierende anhand folgender Merkmale clustern:

  • Herkunftsland
  • Geschlecht
  • Vorheriger akademischer Hintergrund

All diese Cluster sind valide, unterscheiden sich aber in ihrer Bedeutung.

Obwohl die euklidische Distanz am weitesten verbreitet ist, gibt es weitere Maße wie Manhattan- oder Canberra-Distanz, Pearson- oder Spearman-Korrelation und die Minkowski-Distanz.

Wie man Cluster vor dem Mergen misst

Die genannten Distanzen beziehen sich auf einzelne Items. Hier betrachten wir drei gängige Methoden, um die „nächsten“ Cluster vor dem Zusammenführen zu bestimmen: (1) Single Linkage, (2) Complete Linkage und (3) Average Linkage.

Single Linkage

Aus allen paarweisen Distanzen zwischen Items in den Clustern C1 und C2 ist die Clusterdistanz das Minimum.

Distance (C1, C2) = Min { d(i, j), wobei Item i in C1 und Item j in C2 liegt }

Unter allen Item-Paaren aus beiden Clustern haben die grün markierten den geringsten Abstand.

Single linkage illustration

Single-Linkage-Illustration

Complete Linkage

Aus allen paarweisen Distanzen zwischen Items in C1 und C2 ist die Clusterdistanz hier das Maximum.

Distance (C1, C2) = Max { d(i, j), wobei Item i in C1 und Item j in C2 liegt }

Unter allen Item-Paaren aus beiden Clustern haben die grün markierten den größten Abstand.

Complete linkage illustration

Complete-Linkage-Illustration

Average Linkage

Bei Average Linkage entspricht die Distanz zwischen zwei Clustern C1 und C2 dem Durchschnitt aller paarweisen Distanzen zwischen den Items beider Cluster.

Distance (C1, C2) = Sum{ d(i, j) } / Anzahl der Distanzen

Average linkage illustration

Average-Linkage-Illustration

Dann ergibt sich die Average-Linkage-Distanz wie folgt:

d(a,j) + d(a,h) + d(a,n) + d(d,j) + d(d,h) + d(d,n)

—-----------------------------------------------------------, wobei die Anzahl der Distanzen = 6

Anzahl der Distanzen

Hierarchisches Clustering in Python umsetzen

Jetzt kennst du die Grundlagen. In diesem Abschnitt geht es um die technische Umsetzung in Python.

Wenn du die Implementierung lieber in R nachvollziehen möchtest, starte mit unserem Hierarchical clustering in R Tutorial.

Umgebung einrichten

Du brauchst eine installierte Python-Version sowie die folgenden Bibliotheken:

  • Pandas zum Laden von DataFrames.
  • Scikit-learn für die Normalisierung.
  • Seaborn und matplotlib für Visualisierungen.
  • Scipy für das Clustering.

Du kannst sie mit dem Paketmanager pip wie folgt installieren:

pip install scikit-learn
pip install pandas

pip install matplotlib seaborn

pip install scipy

Als Nächstes importieren wir die benötigten Module und laden den Datensatz. Wir verwenden das integrierte Iris-Dataset aus scikit-learn, das Informationen zu verschiedenen Iris-Arten enthält.

Um den Anwendungsfall greifbarer zu machen, nutzen wir die Loan Data aus DataLab. Den gesamten Code findest du in diesem DataLab-Workbook. Du kannst es im Browser kopieren und ausführen, ohne Software lokal installieren zu müssen.

Die Daten verstehen

Der Datensatz enthält 9.500 Kredite mit Informationen zur Kreditstruktur, zu Kreditnehmenden und dazu, ob der Kredit vollständig zurückgezahlt wurde. Um den unüberwachten Charakter zu wahren, entfernen wir die Zielspalte not.fully.paid.

import pandas as pd
loan_data = pd.read_csv("loan_data.csv")
loan_data.head()

First five rows of the load dataDie ersten fünf Zeilen der Daten

Die folgende Ausgabe zeigt: Die Daten haben 9.578 Zeilen und 14 Spalten numerischer Typen, außer purpose (Objekt), das den Zweck als Text beschreibt.

loan_data.info()

Information about the dataInformationen zum Datensatz

Daten vorverarbeiten

Vor dem Clustering müssen die Daten bereinigt werden: fehlende Werte prüfen, Spaltenwerte normalisieren und irrelevante Spalten entfernen.

Mit fehlenden Werten umgehen

Wie die folgende Ausgabe zeigt, gibt es keine fehlenden Werte.

percent_missing =round(100*(loan_data.isnull().sum())/len(loan_data),2)
percent_missing

Percentage of missing values in the dataProzentsatz fehlender Werte

Unerwünschte Spalten entfernen

Wir analysieren alle Spalten mit Ausnahme von:

  • purpose
  • not.fully.paid, da dies das Label ist, ob vollständig zurückgezahlt wurde.

cleaned_data entspricht den Daten ohne diese Spalten.

cleaned_data = loan_data.drop(['purpose', 'not.fully.paid'], axis=1)
cleaned_data.info()

Das folgende Bild zeigt die Informationen zu den bereinigten Daten.

New data without the unwanted columns

Neue Daten ohne die entfernten Spalten

Ausreißer analysieren

Eine Schwäche des hierarchischen Clustering ist die Empfindlichkeit gegenüber Ausreißern. Die Verteilung jeder Variablen zeigt der Boxplot.

def show_boxplot(df):
plt.rcParams['figure.figsize'] = [14,6]
sns.boxplot(data = df, orient="v")
plt.title("Outliers Distribution", fontsize = 16)
plt.ylabel("Range", fontweight = 'bold')
plt.xlabel("Attributes", fontweight = 'bold')
   
show_boxplot(cleaned_data)


Boxplot of all the variables in the data

Boxplot aller Variablen

Der revolvierende Saldo der Kreditnehmenden (revol_bal) ist die einzige Variable mit deutlich entfernten Punkten.

Mit dem Interquartilsabstand (IQR) können wir Punkte entfernen, die außerhalb des Bereichs Quartile ± 1,5 × IQR liegen.

Das leistet die folgende Hilfsfunktion.

def remove_outliers(data):
   
df = data.copy()
   
for col in list(df.columns):
 
      Q1 = df[str(col)].quantile(0.05)
      Q3 = df[str(col)].quantile(0.95)
      IQR = Q3 - Q1
      lower_bound = Q1 - 1.5*IQR
      upper_bound = Q3 + 1.5*IQR
 
      df = df[(df[str(col)] >= lower_bound) & 

        (df[str(col)] <= upper_bound)]
   
return df

Anschließend wenden wir die Funktion auf den Datensatz an.

without_outliers = remove_outliers(cleaned_data)

Jetzt prüfen wir den neuen Boxplot und vergleichen ihn mit dem vor der Ausreißerentfernung.

show_boxplot(without_outliers)

Outliers Distribution

Es liegen keine Punkte mehr außerhalb des Interquartilsbereichs.

without_outliers.shape

Die Daten haben nun 9.319 Zeilen und 12 Spalten. Das heißt, 259 Beobachtungen wurden als Ausreißer entfernt.

Daten skalieren

Da hierarchisches Clustering häufig die euklidische Distanz nutzt, die empfindlich auf unterschiedlich skalierte Variablen reagiert, sollten alle Variablen vor der Distanzberechnung skaliert werden.

Das erledigen wir mit StandardScaler aus sklearn.

from sklearn.preprocessing import StandardScaler

data_scaler = StandardScaler()

scaled_data = data_scaler.fit_transform(without_outliers)
scaled_data.shape

Die Form bleibt gleich (9.319 Zeilen, 12 Spalten), denn die Normalisierung ändert die Dimensionen nicht.

Den Algorithmus anwenden

Alle Voraussetzungen sind erfüllt, um die Implementierung zu starten.

Über den Parameter method der Funktion linkage() wählen wir die Linkage-Variante. In diesem Abschnitt betrachten wir alle drei Techniken mit euklidischer Distanz.

Nach dem Import der benötigten Bibliotheken setzen wir Folgendes um:

from scipy.cluster.hierarchy import linkage, dendrogram

complete_clustering = linkage(scaled_data, method="complete", metric="euclidean")
average_clustering = linkage(scaled_data, method="average", metric="euclidean")
single_clustering = linkage(scaled_data, method="single", metric="euclidean")

Nach der Berechnung der drei Clusterings visualisieren wir die entsprechenden Dendrogramme, beginnend mit Complete Linkage.

dendrogram(complete_clustering)
plt.show()

Dendrogram of the complete clustering approach

Dendrogramm: Complete Linkage

dendrogram(average_clustering)
plt.show()

Dendrogram of the average clustering approach

Dendrogramm: Average Linkage

dendrogram(single_clustering)
plt.show()

Dendrogram of the single clustering approach

Dendrogramm: Single Linkage

Ergebnisse interpretieren (Dendrogramm visualisieren, Clusteranzahl bestimmen)

Für jede Linkage-Variante zeigt das Dendrogramm, wie die Zusammenführung erfolgt, bis alle Punkte in einem Cluster enden.

  • Die x-Achse stellt die Stichproben dar.
  • Die y-Achse zeigt die Distanzen. Je höher die Linie, desto unähnlicher sind die Cluster.
  • Die passende Clusterzahl erhältst du, indem du eine horizontale Linie durch die höchste vertikale Linie ohne Schnitt mit anderen Clustern ziehst. Die Anzahl der Schnittpunkte entspricht der Clusteranzahl.

Die optimale Zahl an Clustern findet sich über die höchste vertikale Linie, die keine anderen Cluster (horizontale Linien) schneidet. In den Abbildungen ist sie rot markiert.

  • Bei Complete Linkage ist es die blaue Linie rechts und es ergeben sich drei Cluster.

Optimal number of cluster from the highest distance without intersection (complete linkage)

Optimale Clusterzahl ohne Schnittpunkte (Complete Linkage)

  • Bei Average Linkage ist es die erste blaue Vertikallinie und es ergeben sich zwei Cluster.

Optimal number of clusters from the highest distance without intersection (average linkage)

Optimale Clusterzahl ohne Schnittpunkte (Average Linkage)

  • Bei Single Linkage ist es die erste Vertikallinie, was nur einen Cluster nahelegt.

Optimal number of clusters from the highest distance without intersection

Optimale Clusterzahl ohne Schnittpunkte (Single Linkage)

Aus diesen Beobachtungen liefert Average Linkage die stimmigsten Cluster, während Single und Complete Linkage jeweils einen bzw. drei Cluster nahelegen. Zudem passt die optimale Anzahl von zwei Clustern zu unserem Vorwissen über den Datensatz: zwei Typen von Kreditnehmenden.

Nachdem wir die optimale Clusterzahl bestimmt haben, schauen wir uns die Bedeutung der Cluster anhand des Kreditscores an.

cluster_labels = cut_tree(average_clustering, n_clusters=2).reshape(-1, )
without_outliers["Cluster"] = cluster_labels

sns.boxplot(x='Cluster', y='fico', data=without_outliers)

Boxplot

Aus dem Boxplot lässt sich ablesen:

  • Kreditnehmende in Cluster 0 haben die höheren Kreditscores.
  • Kreditnehmende in Cluster 1 haben niedrigere Scores.

Cluster Analysis in Python ist ein guter nächster Schritt, um mit Scipy tiefer in K-Means und hierarchisches Clustering einzusteigen.

Fazit

In diesem Beitrag hast du gelernt, was hierarchisches Clustering ist, welche Stärken und Schwächen es hat und wie es sich gegenüber K-Means und modellbasiertem Clustering einordnet.

Wir hoffen, du hast jetzt das nötige Rüstzeug, um unbeschriftete Daten effektiv zu clustern und daraus tragfähige Entscheidungen abzuleiten.

Hierarchisches Clustering: FAQs

Wie wählst du die richtige Anzahl an Clustern aus?

Beim hierarchischen Clustering bestimmst du die passende Clusteranzahl am Dendrogramm, indem du die höchste vertikale Linie identifizierst, die keine anderen Cluster schneidet.

Wie gehst du mit kategorialen Daten im hierarchischen Clustering um?

Hierarchisches Clustering kann standardmäßig nicht mit kategorialen Daten umgehen. Wandle sie vorab in geeignete numerische Formate um, zum Beispiel per One-Hot- oder Ordinal-Codierung, und wende dann den Algorithmus an.

Wie gehst du mit großen Datensätzen um?

Je größer der Datensatz, desto länger dauert das Clustering. Der agglomerative Ansatz ist oft schneller als der divisive.

Was ist der Agglomerative Information Bottleneck (AIB)?

Das ist ein Clustering-Algorithmus, der die gegenseitige Information pro Cluster zwischen den Daten und einer Menge gegebener Kategorien maximiert.

Was ist gewichtetes hierarchisches Clustering?

Das ist eine Variante des hierarchischen Clustering, bei der jedem Datenpunkt ein Gewicht zugewiesen wird, das seine Bedeutung bzw. Relevanz im Clustering-Prozess widerspiegelt.

Themen
Python
Maschinelles Lernen

Clustering-Kurse

Kurs

Cluster Analysis in Python

4 Std.
65.8K
In diesem Kurs über unüberwachtes Lernen wendest du Techniken wie hierarchisches und k-Means-Clustering mit der SciPy-Bibliothek an.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow