2.5.7
Ιεραρχική Ομαδοποίηση
- Η ιεραρχική ομαδοποίηση δημιουργεί ένα δέντρο (δενδρόγραμμα) που δείχνει πώς τα δείγματα συγχωνεύονται, ώστε να μπορείτε να εξερευνάτε δομές συστάδων σε πολλαπλές αναλύσεις.
- Στη συσσωρευτική ρύθμιση, κάθε σημείο ξεκινά ως δική του συστάδα και τα ζεύγη συγχωνεύονται βήμα προς βήμα σύμφωνα με ένα κριτήριο σύνδεσης.
- Οι επιλογές σύνδεσης (
ward,complete,average,single) και οι μετρικές απόστασης (euclidean,cosine, κ.λπ.) αλλάζουν τη μορφή του δενδρογράμματος. - Μπορείτε να οπτικοποιήσετε την ιεραρχία με
scipy.cluster.hierarchyκαι να εξαγάγετε επίπεδες συστάδες με τονAgglomerativeClusteringτου scikit-learn.
Εισαγωγή #
Αυτή η μέθοδος πρέπει να ερμηνεύεται μέσα από τις υποθέσεις της, τις συνθήκες δεδομένων και τον τρόπο με τον οποίο οι επιλογές παραμέτρων επηρεάζουν τη γενίκευση.
Αναλυτική Επεξήγηση #
1. Επισκόπηση #
Η συσσωρευτική ομαδοποίηση προχωρά ως εξής:
- Αντιμετωπίστε κάθε δείγμα ως δική του συστάδα.
- Βρείτε το ζεύγος συστάδων με τη μικρότερη απόσταση σύμφωνα με τον επιλεγμένο κανόνα σύνδεσης.
- Συγχωνεύστε το ζεύγος, καταγράψτε το ύψος συγχώνευσης και επαναλάβετε μέχρι να γίνουν τα πάντα μία συστάδα.
Η κοπή του δενδρογράμματος σε ένα συγκεκριμένο ύψος δίνει μια επίπεδη ομαδοποίηση. Η σύνδεση 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()
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