HDBSCAN

Basic

HDBSCAN | Agrupamiento jerárquico basado en densidad

Creado: Última actualización: Tiempo de lectura: 3 min
まとめ
  • HDBSCAN extiende DBSCAN explorando una jerarquía de umbrales de densidad, por lo que puede detectar clústeres con densidades distintas y etiquetar automáticamente el resto como ruido.
  • Los parámetros clave son min_cluster_size (tamaño mínimo del clúster) y min_samples (severidad del criterio de núcleo). Los puntos con etiqueta -1 se consideran ruido.
  • El algoritmo construye un árbol de mínimos alcanzables mediante distancias de alcance mutuo, lo condensa y selecciona los clústeres más persistentes.
  • Combínalo con UMAP u otras reducciones de dimensionalidad para descubrir grupos naturales tras proyectar los datos.

1. Descripción general #

DBSCAN requiere elegir un único eps, lo cual es difícil si las densidades varían entre clústeres. HDBSCAN elimina eps y recorre todos los radios posibles, construyendo una jerarquía de clústeres. Después conserva los clústeres con mayor persistencia, es decir, los que sobreviven a lo largo de un amplio rango de densidades.

Parámetros principales:

  • min_cluster_size: tamaño mínimo que debe tener un clúster para mantenerse en el resultado.
  • min_samples: número de vecinos necesario para declarar un punto como núcleo (si no se especifica, toma el valor anterior).
  • cluster_selection_method: "eom" (excess of mass) favorece clústeres estables; "leaf" conserva hojas más finas.

2. Distancia núcleo y alcance mutuo #

Para cada punto (x) se calcula la distancia núcleo

$$ d_{\mathrm{core}}(x) = \text{distancia al vecino número } \texttt{min_samples}. $$

La distancia de alcance mutuo entre (x) e (y) es

$$ d_{\mathrm{mreach}}(x, y) = \max\left{ d_{\mathrm{core}}(x),; d_{\mathrm{core}}(y),; \lVert x - y \rVert \right}. $$

Con estas distancias HDBSCAN construye un árbol recubridor mínimo, lo condensa y asigna una puntuación de persistencia a cada clúster. Sólo los clústeres con alta persistencia se reportan; los puntos que nunca pertenecen a uno de ellos se etiquetan como ruido.

3. Ejemplo en Python #

Usa la librería hdbscan para agrupar datos con forma de dos lunas:

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("Resultado de HDBSCAN")
plt.xlabel("característica 1")
plt.ylabel("característica 2")
plt.grid(alpha=0.2)
plt.show()

print("Persistencia de clústeres:", clusterer.cluster_persistence_)
print("Puntos de ruido:", np.sum(labels == -1))

La salida cluster_persistence_ ayuda a decidir qué clústeres son significativos; si es baja, aumenta min_cluster_size o reduce el ruido de los datos.

4. Consejos prácticos #

  • Estandariza las variables antes de agrupar.
  • Para obtener más clústeres, reduce min_cluster_size o usa cluster_selection_method="leaf".
  • Para eliminar fragmentos diminutos, mantén min_cluster_size alto y usa min_samples moderado (5–10).
  • Pipeline habitual: aplica UMAP para bajar a pocas dimensiones y luego HDBSCAN para encontrar grupos en el espacio reducido.

5. Referencias #

  • 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