Clustering hierarkis

Basic

Clustering hierarkis | Pengelompokan dengan dendrogram

Dibuat: Pembaruan terakhir: Waktu baca: 2 menit
まとめ
  • 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.hierarchy dan ekstrak klaster datar memakai AgglomerativeClustering dari scikit-learn.

1. Gambaran umum #

Langkah-langkah agglomerative clustering:

  1. Setiap sampel = klaster sendiri.
  2. Hitung jarak antar klaster berdasarkan linkage.
  3. Gabungkan pasangan terdekat, catat tinggi gabungannya.
  4. 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()

Dendrogram Ward

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