- HDBSCAN memperluas DBSCAN dengan menelusuri hierarki ambang kepadatan sehingga mampu menemukan klaster berdensitas berbeda dan menandai area jarang sebagai noise.
- Parameter penting:
min_cluster_size(ukuran klaster minimum) danmin_samples(kriteria titik inti). Label-1berarti sampel tersebut noise. - Algoritma membangun pohon berbasis mutual reachability distance, mengkondensasikannya, lalu memilih klaster dengan persistensi tertinggi.
- Cocok dipadukan dengan UMAP atau reduksi dimensi lain untuk mengelompokkan embedding berdimensi rendah.
1. Gambaran umum #
DBSCAN membutuhkan satu nilai eps; sulit memilihnya jika tiap klaster punya kepadatan berbeda. HDBSCAN meniadakan eps, memindai semua radius, dan membentuk hierarki klaster. Dari hierarki tersebut ia memilih klaster yang stabil di banyak level kepadatan.
Parameter kunci:
min_cluster_size: ukuran terkecil yang masih dianggap klaster bermakna.min_samples: jumlah tetangga agar titik menjadi inti (default sama denganmin_cluster_size).cluster_selection_method:"eom"memilih klaster paling stabil, sedangkan"leaf"mempertahankan daun yang lebih halus.
2. Jarak inti dan mutual reachability #
Untuk titik (x), jarak inti didefinisikan sebagai
$$ d_{\mathrm{core}}(x) = \text{jarak ke tetangga ke-}\texttt{min_samples}. $$
Mutual reachability distance antara (x) dan (y):
$$ d_{\mathrm{mreach}}(x, y) = \max\left{ d_{\mathrm{core}}(x),; d_{\mathrm{core}}(y),; \lVert x - y \rVert \right}. $$
HDBSCAN membuat minimum spanning tree dari jarak tersebut, mengkondensasikannya, lalu menghitung skor persistensi setiap klaster. Klaster dengan persistensi tinggi dilaporkan; sampel yang tidak pernah bergabung ke klaster stabil diberi label -1.
3. Contoh Python #
Gunakan pustaka hdbscan untuk mengelompokkan data dua bulan sabit:
import numpy as np
import matplotlib.pyplot as plt
import hdbscan
from sklearn.datasets import make_moons
X, _ = make_moons(n_samples=400, noise=0.08, random_state=42)
clusterer = hdbscan.HDBSCAN(
min_cluster_size=20,
min_samples=10,
cluster_selection_method="eom",
)
labels = clusterer.fit_predict(X)
plt.figure(figsize=(6, 5))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="tab10", s=20)
plt.title("Hasil klaster HDBSCAN")
plt.xlabel("fitur 1")
plt.ylabel("fitur 2")
plt.grid(alpha=0.2)
plt.show()
print("Persistensi klaster:", clusterer.cluster_persistence_)
print("Jumlah noise:", np.sum(labels == -1))
cluster_persistence_ menunjukkan klaster mana yang paling stabil; jika nilainya rendah, tingkatkan min_cluster_size atau bersihkan noise pada data.
4. Tips praktis #
- Standarkan fitur sebelum clustering.
- Untuk hasil lebih detail, kecilkan
min_cluster_sizeatau pilihcluster_selection_method="leaf". - Untuk meredam fragmen kecil, pertahankan
min_cluster_sizebesar danmin_samplessedang (5–10). - Pipeline umum: reduksi dimensi dengan UMAP, lalu jalankan HDBSCAN pada embedding tersebut.
5. Referensi #
- Campello, R. J. G. B., Moulavi, D., Zimek, A., & Sander, J. (2013). Density-Based Clustering Based on Hierarchical Density Estimates. PAKDD.
- McInnes, L., Healy, J., & Astels, S. (2017). hdbscan: Hierarchical Density Based Clustering. Journal of Open Source Software.
- scikit-learn developers. (2024). Clustering. https://scikit-learn.org/stable/modules/clustering.html