まとめ
- Clustering hierarkis menghasilkan dendrogram yang menunjukkan urutan penggabungan sampel sehingga kita dapat melihat struktur pada berbagai skala.
- Dalam versi aglomeratif setiap titik berawal sebagai klaster tunggal lalu digabung bertahap sesuai aturan linkage.
- Pilihan linkage (
ward,complete,average,single) dan metrik jarak menentukan bentuk dendrogram. - Visualisasikan hierarchy dengan
scipy.cluster.hierarchydan ekstrak klaster datar memakaiAgglomerativeClusteringdari scikit-learn.
1. Gambaran umum #
Langkah-langkah agglomerative clustering:
- Setiap sampel = klaster sendiri.
- Hitung jarak antar klaster berdasarkan linkage.
- Gabungkan pasangan terdekat, catat tinggi gabungannya.
- Ulangi sampai tersisa satu klaster.
Potong dendrogram pada ketinggian pilihan untuk mendapatkan (k) klaster. Ward menghasilkan klaster kompak; single rentan membuat rantai panjang.
2. Aturan linkage #
Misal (C_i) dan (C_j) punya centroid (\mu_i) dan (\mu_j).
- Ward: $$ \Delta = \frac{|C_i||C_j|}{|C_i| + |C_j|} \lVert \mu_i - \mu_j \rVert^2. $$
- Complete: jarak maksimum antar titik lintas klaster.
- Average: rata-rata seluruh jarak silang.
- Single: jarak minimum (mudah chaining).
Pilih linkage sesuai bentuk klaster yang diharapkan, dan skala fitur terlebih dahulu.
3. Contoh Python #
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("Clustering hierarkis (Ward linkage)")
plt.xlabel("indeks sampel/ID klaster")
plt.ylabel("jarak")
plt.show()
from sklearn.cluster import AgglomerativeClustering
clustering = AgglomerativeClustering(
n_clusters=3,
linkage="average",
affinity="euclidean",
)
labels = clustering.fit_predict(X)
Gunakan distance_threshold bila ingin memotong dendrogram di tinggi tertentu.
4. Referensi #
- 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