Ιεραρχική Ομαδοποίηση

2.5.7

Ιεραρχική Ομαδοποίηση

Ενημέρωση 2025-11-05 Ανάγνωση 2 λεπτά
Σύνοψη
  • Η ιεραρχική ομαδοποίηση δημιουργεί ένα δέντρο (δενδρόγραμμα) που δείχνει πώς τα δείγματα συγχωνεύονται, ώστε να μπορείτε να εξερευνάτε δομές συστάδων σε πολλαπλές αναλύσεις.
  • Στη συσσωρευτική ρύθμιση, κάθε σημείο ξεκινά ως δική του συστάδα και τα ζεύγη συγχωνεύονται βήμα προς βήμα σύμφωνα με ένα κριτήριο σύνδεσης.
  • Οι επιλογές σύνδεσης (ward, complete, average, single) και οι μετρικές απόστασης (euclidean, cosine, κ.λπ.) αλλάζουν τη μορφή του δενδρογράμματος.
  • Μπορείτε να οπτικοποιήσετε την ιεραρχία με scipy.cluster.hierarchy και να εξαγάγετε επίπεδες συστάδες με τον AgglomerativeClustering του scikit-learn.

Εισαγωγή #

Αυτή η μέθοδος πρέπει να ερμηνεύεται μέσα από τις υποθέσεις της, τις συνθήκες δεδομένων και τον τρόπο με τον οποίο οι επιλογές παραμέτρων επηρεάζουν τη γενίκευση.

Αναλυτική Επεξήγηση #

1. Επισκόπηση #

Η συσσωρευτική ομαδοποίηση προχωρά ως εξής:

  1. Αντιμετωπίστε κάθε δείγμα ως δική του συστάδα.
  2. Βρείτε το ζεύγος συστάδων με τη μικρότερη απόσταση σύμφωνα με τον επιλεγμένο κανόνα σύνδεσης.
  3. Συγχωνεύστε το ζεύγος, καταγράψτε το ύψος συγχώνευσης και επαναλάβετε μέχρι να γίνουν τα πάντα μία συστάδα.

Η κοπή του δενδρογράμματος σε ένα συγκεκριμένο ύψος δίνει μια επίπεδη ομαδοποίηση. Η σύνδεση Ward τείνει να παράγει συμπαγείς συστάδες, ενώ η μονή σύνδεση συχνά σχηματίζει αλυσιδωτές συστάδες.

2. Κριτήρια σύνδεσης #

Έστω (C_i) και (C_j) συστάδες με κεντροειδή (\mu_i) και (\mu_j). Συνήθεις κανόνες σύνδεσης:

  • Ward: ελαχιστοποιεί την αύξηση της ενδο-συσταδικής διακύμανσης $$ \Delta = \frac{|C_i||C_j|}{|C_i| + |C_j|} \lVert \mu_i - \mu_j \rVert^2. $$
  • Πλήρης: απόσταση μεταξύ του πιο απομακρυσμένου ζεύγους σημείων μεταξύ συστάδων.
  • Μέση: μέση απόσταση κατά ζεύγη μεταξύ σημείων στις δύο συστάδες.
  • Μονή: απόσταση μεταξύ του πλησιέστερου ζεύγους σημείων (επιρρεπής σε αλυσίδα).

Επιλέξτε τον κανόνα που ταιριάζει στα σχήματα που περιμένετε και κανονικοποιήστε τα χαρακτηριστικά σας εκ των προτέρων.

3. Παράδειγμα σε Python #

Το παρακάτω απόσπασμα κατασκευάζει ένα δενδρόγραμμα με τη SciPy και στη συνέχεια εκτελεί συσσωρευτική ομαδοποίηση με το scikit-learn:

import numpy as np
from sklearn.datasets import make_blobs
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

X, _ = make_blobs(n_samples=50, centers=3, cluster_std=0.7, random_state=42)

Z = linkage(X, method="ward")

plt.figure(figsize=(8, 4))
dendrogram(Z, truncate_mode="level", p=5)
plt.title("Hierarchical clustering with Ward linkage")
plt.xlabel("sample index or cluster ID")
plt.ylabel("distance")
plt.show()

Δενδρόγραμμα Ward

from sklearn.cluster import AgglomerativeClustering

clustering = AgglomerativeClustering(
    n_clusters=3,
    linkage="average",
    affinity="euclidean",
)
labels = clustering.fit_predict(X)

Ορίστε distance_threshold αντί για n_clusters αν θέλετε να κόψετε το δενδρόγραμμα σε προσαρμοσμένο ύψος.

4. Αναφορές #

  • Ward, J. H. (1963). Hierarchical Grouping to Optimize an Objective Function. Journal of the American Statistical Association.
  • Müllner, D. (2011). Modern Hierarchical, Agglomerative Clustering Algorithms. arXiv:1109.2378.
  • scikit-learn developers. (2024). Hierarchical clustering. https://scikit-learn.org/stable/modules/clustering.html#hierarchical-clustering