Ga naar hoofdinhoud

Hiërarchische clustering: conceptueel overzicht met voorbeelden

Begrijp de basisconcepten van hiërarchische clustering, hoe het werkt en hoe je het in Python implementeert.
Bijgewerkt 2 okt 2026  · 9 min lezen

Verken met AI

ChatGPTClaudePerplexity

Je hebt net de taak gekregen om een grote dataset te analyseren en je moet een diepgaande clusteranalyse opleveren. Je bent de term “hiërarchische clustering” tegengekomen, maar wat is het precies en hoe werkt het? 

In dit artikel verkennen we het concept van hiërarchische clustering en geven we voorbeelden uit de praktijk om je te helpen de toepassingen beter te begrijpen.

Wat is hiërarchische clustering?

Hiërarchische clustering is een unsupervised learning-algoritme dat wordt gebruikt om vergelijkbare datapunten te groeperen in clusters. Het bouwt een meerlagige hiërarchie van clusters door ofwel kleinere clusters samen te voegen tot grotere (agglomeratief) of een groot cluster op te splitsen in kleinere (divisief). Dit resulteert in een boomachtige structuur die een dendrogram wordt genoemd.

Een dendrogram is een visuele weergave die de rangschikking van clusters en hun onderlinge relaties illustreert. De hoogte van de takken in een dendrogram stelt de afstand of ongelijkheid voor waarbij clusters samenkomen. Lagere hoogtes duiden op clusters die op kleinere afstanden zijn samengevoegd en dus een hogere gelijkenis vertegenwoordigen.

Waarom hiërarchische clustering belangrijk is in machine learning

Hiërarchische clustering is vooral nuttig wanneer het aantal clusters niet vooraf bekend is. Het stelt data-analisten en data scientists in staat om de structuur van de data visueel te verkennen via dendrogrammen. 

Deze techniek kan ook geneste clusters blootleggen en wordt veel gebruikt in vakgebieden zoals genomica, klantsegmentatie en documentorganisatie.

Stel bijvoorbeeld dat we een dataset met aankoopgegevens van klanten hebben. Met hiërarchische clustering kunnen we klanten met vergelijkbare kooppatronen groeperen in clusters en potentiële marktsegmenten identificeren voor gerichte marketingstrategieën.

Hiërarchisch vs. K-means clusteren

Bij clusteringtaken twijfelen de meesten tussen twee hoofdmethoden: hiërarchische clustering of k-means clustering.

Maar wat maakt ze anders? Laten we hieronder naar de verschillen kijken voor een duidelijker beeld.

  • K-means:
    • Vereist dat het aantal clusters vooraf wordt bepaald.
    • Efficiënt en schaalbaar voor grote datasets.
    • Gaat uit van bolvormige en even grote clusters.
  • Hiërarchische clustering:
    • Vereist geen vooraf gedefinieerd aantal clusters.
    • Beter te interpreteren dankzij dendrogrammen.
    • Langzamer op grote datasets, maar beter om structuur te verkennen.

Bij het vergelijken van de twee zijn er enkele punten die hiërarchische clustering tot een opvallende optie maken.

Hier zijn enkele gebieden waar hiërarchische clustering goed in is:

  • Flexibiliteit in clusterselectie met behulp van dendrogrammen.
  • Geschikt voor kleine datasets of wanneer een visuele hiërarchie nodig is.
  • Kan complexe clustervormen aan.

Er zijn echter ook nadelen, zoals:

  • Rekenintensief
  • Gevoelig voor ruis in data en uitbijters.

Je vraagt je misschien af: wanneer moet ik hiërarchische clustering gebruiken?

Hiërarchische clustering is een uitstekende keuze in de volgende toepassingen:

Typen hiërarchische clustering

Binnen de techniek van hiërarchische clustering kun je verschillende typen verwachten, elk met andere inzichten en resultaten. De twee belangrijkste typen hiërarchische clustering zijn agglomeratief (bottom-up) en divisief (top-down).

agglomerative vs divisive

Bron: Himanshu Sharma op Medium

1. Agglomeratief (bottom-up)

Agglomeratieve clustering begint met elk datapunt als een individueel cluster en voegt iteratief het dichtstbijzijnde paar clusters samen totdat er nog maar één cluster overblijft of totdat een stopvoorwaarde is bereikt (zoals een gewenst aantal clusters).

Deze methode wordt ook wel bottom-up genoemd omdat ze onderaan begint (individuele datapunten) en opbouwt naar boven (het uiteindelijke cluster).

Stapsgewijze handleiding:

  1. Behandel elk datapunt als een singletoncluster.
  2. Bereken de paargewijze afstanden tussen alle clusters.
  3. Voeg de twee clusters met de kleinste afstand samen.
  4. Werk de afstandsmatrix bij om de nieuwe set clusters weer te geven.
  5. Herhaal stap 2–4 totdat alle punten tot één cluster behoren.

Deze methode is wijdverbreid door de eenvoud en het gemak van implementatie.

Hier is een voorbeeld van hoe je dit in Python kunt implementeren:

import numpy as np
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
import matplotlib.pyplot as plt

# Samples data
data = np.array([[1, 2], [2, 3], [5, 8], [8, 8], [1, 0], [0, 1]])

# Applies agglomerative clustering using Ward's method
Z = linkage(data, method='ward')

# Plots dendrogram
plt.figure(figsize=(8, 4))
dendrogram(Z)
plt.title('Agglomerative Clustering Dendrogram')
plt.xlabel('Data Points')
plt.ylabel('Distance')
plt.show()

# Extracts clusters (e.g., form 2 clusters)
clusters = fcluster(Z, t=2, criterion='maxclust')
print("Cluster assignments:", clusters)

2. Divisief (top-down)

Divisieve clustering begint met alle datapunten in één cluster en splitst deze vervolgens recursief in kleinere clusters. Het proces gaat door totdat elk datapunt een eigen individueel cluster vormt.

Dit staat ook bekend als een top-downbenadering, omdat het bovenaan begint (één cluster) en wordt opgesplitst in kleinere clusters.

Stapsgewijze handleiding:

  1. Begin met één groot cluster dat alle datapunten bevat.
  2. Splits het cluster in twee die zo verschillend mogelijk zijn.
  3. Pas het splitsingsproces recursief opnieuw toe op elk resulterend cluster.

Divisieve methoden zijn doorgaans rekenkundig zwaarder door hun recursieve aard, en de nauwkeurigheid hangt sterk af van de splitsingsstrategie. Agglomeratieve methoden komen vaker voor vanwege de eenvoud van implementatie en brede software-ondersteuning.

Opmerking: divisieve hiërarchische clustering wordt in standaard Python-bibliotheken niet zo gemakkelijk ondersteund als agglomeratieve clustering. Een aanpak is om clusteringalgoritmen zoals k-means recursief te gebruiken.

Hier is een codeconcept van een gesimuleerde recursieve k-means-splitsing:

from sklearn.cluster import KMeans

def divisive_clustering(data, depth=2):
    if depth == 0 or len(data) <= 1:
        return [data]

    kmeans = KMeans(n_clusters=2, random_state=42).fit(data)
    labels = kmeans.labels_
    cluster1 = data[labels == 0]
    cluster2 = data[labels == 1]

    return divisive_clustering(cluster1, depth - 1) + divisive_clustering(cluster2, depth - 1)

# Run recursive splitting to simulate divisive clustering
split_clusters = divisive_clustering(data, depth=2)
for i, cluster in enumerate(split_clusters):
    print(f"Cluster {i+1} size: {len(cluster)}")

Deze vereenvoudigde code illustreert een conceptuele benadering van divisieve clustering met recursieve k-means. Let wel dat standaard divisieve methoden zoals DIANA andere splitsingscriteria gebruiken.

Belangrijke concepten en terminologie

Hiërarchische clustering omvat enkele kernconcepten en termen die belangrijk zijn om te begrijpen. Om het proces volledig te begrijpen, gaan we hieronder dieper in op deze concepten.

1. Dendrogrammen

dendogram example

Een dendrogram is een boomachtige structuur die het proces van hiërarchische clustering visualiseert. Elk niveau van de boom staat voor een samenvoegings- of splitsingsstap, en de hoogte van de takken staat voor de afstand (of ongelijkheid) waarbij clusters zijn samengevoegd.

Hierom is het belangrijk:

  • Maakt visuele inspectie van clusters op verschillende niveaus mogelijk.
  • Door het dendrogram op een bepaalde hoogte te “knippen” kun je het aantal clusters kiezen dat het best bij de data past.

2. Koppelingscriteria (linkage)

Koppelingscriteria bepalen hoe afstanden tussen clusters worden berekend tijdens het samenvoegen.

Hier zijn enkele typen koppelingscriteria:

Single linkage (minimum)

Dit criterium kijkt naar de afstand tussen de dichtstbijzijnde punten van twee clusters. Dit kan resulteren in langgerekte, kettingachtige clusters.

from scipy.spatial.distance import pdist, squareform
data = np.array([[1, 2], [2, 3], [5, 8]])
distance_matrix = squareform(pdist(data, metric='euclidean')) 
single_linkage_min = np.min(distance_matrix[0, 1:])
print("Single Linkage Distance between Cluster A (point 1) and Cluster B (point 2, 3):", single_linkage_min)

Complete linkage (maximum)

Dit criterium kijkt naar de afstand tussen de verst uit elkaar liggende punten van twee clusters. Dit heeft de neiging compacte, gelijkmatig grote clusters te produceren.

single_linkage_max = np.max(distance_matrix[0, 1:])
print("Complete Linkage Distance between Cluster A and B:", single_linkage_max)

Average linkage (gemiddelde)

Dit criterium kijkt naar de gemiddelde afstand tussen alle punten in het ene cluster en alle punten in een ander cluster. Dit biedt een balans tussen single en complete linkage.

average_linkage = np.mean(distance_matrix[0, 1:])
print("Average Linkage Distance between Cluster A and B:", average_linkage)

Deze vereenvoudigde voorbeelden illustreren hoe afstanden aanvankelijk worden berekend. Tijdens het clusteren worden deze criteria (single, complete, average linkage) echter iteratief toegepast tussen hele clusters, niet alleen individuele punten.

Wards methode

Wards methode is een variant op average linkage die de som van gekwadrateerde verschillen binnen alle clusters minimaliseert. Deze methode levert vaak gelijkmatigere clusters op dan andere methoden en resulteert vaak in goed gescheiden, bolvormige clusters.

from scipy.cluster.hierarchy import linkage
linkage_ward = linkage(data, method='ward')
print("Ward's Linkage Matrix:\n", linkage_ward)

Elke methode heeft zijn eigen sterke punten en moet worden gekozen op basis van de data en de usecase.

3. Afstandsmetriek

De gebruikte afstandsmetriek beïnvloedt het clusterresultaat aanzienlijk.

Euclidische afstand

De Euclidische afstand is de kortste lijn tussen twee punten in een multidimensionale ruimte. Het is de meest gebruikte afstandsmetriek, vooral voor geometrisch verdeelde data.

Manhattan-afstand

Manhattan-afstand, ook wel taxicab- of L1-afstand genoemd, is de som van absolute verschillen over dimensies. Het is nuttig voor roosterachtige data zoals stadsblokken of financiële transacties.

Cosinusovereenkomst

Cosinusovereenkomst meet de cosinus van de hoek tussen twee niet-nulvectoren. Deze metriek is ideaal voor tekstdata of wanneer de grootte niet uitmaakt (bijv. woordfrequentievectoren).

Hiërarchische clustering in Python implementeren

In deze sectie lopen we door een praktische implementatie van agglomeratieve hiërarchische clustering met Python. We behandelen alles van datapreprocessing tot het visualiseren van resultaten met een dendrogram.

Bibliotheken

We beginnen met het importeren van de benodigde bibliotheken:

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

Dit is wat we hierboven hebben geïmporteerd:

  • numpy en pandas voor datamanipulatie
  • scipy.cluster.hierarchy voor clusteren en het genereren van dendrogrammen
  • sklearn.preprocessing.StandardScaler voor feature-scaling
  • matplotlib voor visualisatie

Voorbeelddata

Voordat we beginnen met onze analyse, maken we een eenvoudige dataset van 2D-punten en schalen we die. Schalen is cruciaal voor afstandsgebaseerde algoritmen.

Zo ziet onze voorbeelddataset eruit.

example data array

data = np.array([[1, 2], [2, 3], [5, 8], [8, 8], [1, 0], [0, 1]])
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)

Zo ziet de array met data eruit nadat deze is geschaald.

scaled example data array

Een linkage-matrix en dendrogram genereren

We passen Wards methode toe om een linkage-matrix te genereren, die informatie over de hiërarchische clustering bevat. Vervolgens plotten we een dendrogram.

linkage_matrix = linkage(data_scaled, method='ward')
plt.figure(figsize=(8, 4))
dendrogram(linkage_matrix)
plt.title('Dendrogram')
plt.xlabel('Data Points')
plt.ylabel('Distance')
plt.show()

In de bovenstaande code bouwt linkage de clusterhiërarchie en helpt dendrogram visualiseren hoe clusters zijn gevormd.

dendogram example

Door te kijken waar de verticale lijnen het langst zijn vóór een samenvoeging, kunnen we beslissen waar we moeten “knippen” om clusters te vormen. Zoek naar de hoogste verticale lijn die niet met andere clusters kruist. Daar moet je de knip maken.

In dit geval moet je knippen op 2 clusters.

Clusters maken

Vervolgens knippen we het dendrogram om een specifiek aantal clusters te krijgen met fcluster:

clusters = fcluster(linkage_matrix, t=2, criterion='maxclust')
print(clusters)

plt.scatter(data_scaled[:, 0], data_scaled[:, 1], c=clusters, cmap='rainbow')
plt.title('Clusters')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

Dit kent elk datapunt toe aan een van de twee clusters.

Wat extra informatie over de code:

  • t=2: specificeert het gewenste aantal clusters.
  • criterion='maxclust': zorgt ervoor dat we exact t clusters krijgen.

Je kunt t aanpassen om met verschillende aantallen clusters te experimenteren.

Praktisch voorbeeld: klantsegmentatie

Hiërarchische clustering wordt vaak gebruikt voor klantsegmentatie. Laten we bekijken hoe dit eruitziet in een praktische implementatie.

1. Datasetoverzicht

Laten we een dataset simuleren die klanten voorstelt met twee kenmerken: leeftijd en inkomen. We gebruiken make_blobs om deze synthetische data te genereren.

from sklearn.datasets import make_blobs
X, _ = make_blobs(n_samples=100, centers=3, n_features=2, random_state=42)

2. Preprocessing

Vervolgens standaardiseren we de features om schalen te normaliseren en de clusteringnauwkeurigheid te verbeteren.

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

Zo ziet de geschaalde data eruit:

scaled customer data

3. Hiërarchische clustering toepassen

Nu onze data is verwerkt, plotten we het dendrogram om te visualiseren hoe clusters ontstaan.

linkage_matrix = linkage(X_scaled, method='ward')
plt.figure(figsize=(10, 5))
dendrogram(linkage_matrix)
plt.title('Customer Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
plt.show()

customer clustering dendogram

4. Resultaten interpreteren

Op basis van het dendrogram kiezen we een hoogte om te “knippen” en maken we drie clusters:

labels = fcluster(linkage_matrix, t=3, criterion='maxclust')
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=labels, cmap='rainbow')
plt.title('Customer Segments')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

Customer Segment Clusters

Zakelijke implicaties:

  • Clusters kunnen klantgroepen vertegenwoordigen zoals prijsbewust, middensegment en premiumklanten.
  • Maakt gepersonaliseerde marketing en verbeterde klantrelatiestrategieën mogelijk.

Voordelen en beperkingen van hiërarchische clustering

Kiezen voor hiërarchische clustering voor je analyse heeft verschillende voordelen en beperkingen. 

Bekijk hieronder enkele veelvoorkomende punten:

Voordelen

  • Geen noodzaak om het aantal clusters te specificeren: je kunt dit kiezen na visuele inspectie van het dendrogram.
  • Intuïtieve visualisatie: dendrogrammen helpen begrijpen hoe clusters ontstaan.
  • Flexibel: kan verschillende clustervormen aan, afhankelijk van linkage en afstandsmetriek.

Nadelen

  • Rekenintensief: niet ideaal voor grote datasets.
  • Gevoelig voor ruis en uitbijters: enkele uitbijters kunnen het dendrogram aanzienlijk vertekenen.
  • Geen herindeling: zodra een samenvoeging is gedaan, kan deze niet ongedaan worden gemaakt, wat kan leiden tot suboptimale clustering.

Conclusie

Hiërarchische clustering is een veelzijdige en goed te interpreteren clusteringtechniek die vooral nuttig is in exploratieve data-analyse en domeinen zoals genomica en klantsegmentatie. Ondanks de rekenkundige kosten ligt de kracht in het blootleggen van geneste groeperingen en de flexibiliteit om achteraf het aantal clusters te kiezen via visualisatie met een dendrogram.

Voor kleine tot middelgrote datasets waar uitlegbaarheid centraal staat, blijft hiërarchische clustering een favoriete methode voor data scientists en analisten.

Wil je meer leren over de details van machine learning? Onze Machine Learning Fundamentals in Python track en Introductie tot hiërarchische clustering in Python-tutorial zijn geweldige startpunten.

Veelgestelde vragen over hiërarchische clustering

Is hiërarchische clustering beter dan k-means?

Dat hangt af van de data en wat je wilt bereiken. Hiërarchische clustering is beter voor kleine datasets en wanneer de relaties tussen datapunten niet goed gedefinieerd zijn. K-means is beter voor grotere datasets en wanneer duidelijke clusters kunnen worden geïdentificeerd.

Kan ik hiërarchische clustering gebruiken met categorische variabelen?

Ja, je kunt categorische variabelen omzetten in numerieke waarden en vervolgens hiërarchische clustering toepassen. Het is echter niet altijd geschikt, afhankelijk van de specifieke dataset.

Hoe kies ik het aantal clusters bij hiërarchische clustering?

Er zijn verschillende methoden, zoals interpretatie van het dendrogram, de silhouettecoëfficiënt of de elbow-methode, die kunnen helpen om het optimale aantal clusters voor je dataset te bepalen.

Wat is het verschil tussen hiërarchische clustering en k-means clustering?

Hiërarchische clustering creëert een hiërarchie van clusters door vergelijkbare datapunten te groeperen, terwijl k-means clustering de data opdeelt in een vooraf bepaald aantal clusters op basis van het minimaliseren van de intracluster-variantie. Bovendien vereist k-means dat de gebruiker het aantal clusters vooraf opgeeft, terwijl hiërarchische clustering deze eis niet heeft.

Hoe gaat hiërarchische clustering om met uitbijters?

Hiërarchische clustering is minder gevoelig voor uitbijters dan sommige andere clusteringmethoden, omdat het kijkt naar de algehele datastructuur in plaats van individuele punten. In sommige gevallen kunnen uitbijters de resultaten echter nog steeds verstoren en moeten ze zorgvuldig worden behandeld. Technieken om met uitbijters om te gaan bij hiërarchische clustering zijn onder meer het verwijderen ervan uit de dataset of het gebruiken van een afstandsmaat die minder gevoelig is voor uitbijters.


Austin Chia's photo
Author
Austin Chia
LinkedIn

Ik ben Austin, een blogger en techschrijver met jarenlange ervaring als zowel datascientist als data-analist in de gezondheidszorg. Ik begon mijn techreis met een achtergrond in biologie en help nu anderen dezelfde overstap te maken via mijn techblog. Mijn passie voor technologie heeft geleid tot schrijfbijdragen aan tientallen SaaS-bedrijven, waarmee ik anderen inspireer en mijn ervaringen deel.

Onderwerpen
Data-analyse
Python

Topcursussen op DataCamp

Cursus

Clusteranalyse in Python

4 uur
65.9K
In deze cursus leer je over onbegeleid leren met technieken zoals hiërarchische en k-means clustering met behulp van de SciPy-bibliotheek.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken