2.5.6
HDBSCAN
- O HDBSCAN generaliza o DBSCAN explorando uma hierarquia de limiares de densidade, permitindo clusters com densidades diferentes e rotulando automaticamente amostras de baixa densidade como ruído.
- Dois controles regulam o comportamento:
min_cluster_size(menor cluster significativo) emin_samples(quão rigorosa é a definição de ponto central). Amostras com rótulo-1são tratadas como ruído. - O algoritmo constrói uma árvore geradora mínima usando distâncias de alcançabilidade mútua, condensa-a e classifica os clusters por persistência para decidir quais sobrevivem.
- O HDBSCAN integra-se perfeitamente com UMAP ou outros métodos de aprendizado de variedades: execute UMAP para redução de dimensionalidade e depois agrupe as representações com HDBSCAN para detectar grupos orgânicos.
Intuição #
Este método deve ser interpretado por meio de suas suposições, condições dos dados e como as escolhas de parâmetros afetam a generalização.
Explicação Detalhada #
1. Visão geral #
O DBSCAN clássico depende de um único raio eps; escolher um valor adequado para cada região é difícil quando as densidades variam. O HDBSCAN remove o eps e, em vez disso, varre todos os valores de raio, construindo uma hierarquia de clusters. Dessa hierarquia, ele extrai os clusters mais persistentes — aqueles que permanecem intactos em uma ampla faixa de níveis de densidade.
Parâmetros principais:
min_cluster_size: número mínimo de pontos que torna um cluster válido.min_samples: quantos vizinhos são necessários para que um ponto seja central (padrão émin_cluster_size). Valores maiores tornam o algoritmo mais conservador.cluster_selection_method:"eom"(excess of mass) prefere clusters estáveis, enquanto"leaf"mantém as folhas mais detalhadas.
2. Distância central e alcançabilidade mútua #
Para cada ponto (x) calculamos a distância central
$$ d_{\mathrm{core}}(x) = \text{distance to the } \texttt{min\_samples}\text{-th nearest neighbour}. $$A distância de alcançabilidade mútua entre (x) e (y) é
$$ d_{\mathrm{mreach}}(x, y) = \max\left\{ d_{\mathrm{core}}(x),\; d_{\mathrm{core}}(y),\; \lVert x - y \rVert \right\}. $$O HDBSCAN constrói uma árvore geradora mínima sobre essas distâncias, condensa a hierarquia e atribui a cada cluster uma pontuação de persistência (estabilidade integrada). Clusters com alta persistência são reportados; amostras que nunca pertencem a um componente persistente são rotuladas como ruído ((-1)).
3. Exemplo em Python #
Use a biblioteca hdbscan (instale via pip install hdbscan) para agrupar um conjunto de dados de duas meias-luas:
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("HDBSCAN clustering result")
plt.xlabel("feature 1")
plt.ylabel("feature 2")
plt.grid(alpha=0.2)
plt.show()
print("Cluster persistence:", clusterer.cluster_persistence_)
print("Noise points:", np.sum(labels == -1))
A cluster_persistence_ indica quais clusters são os mais estáveis; se a persistência for baixa, considere aumentar min_cluster_size ou reduzir o ruído nos dados.
4. Dicas práticas #
- Normalize os atributos antes do agrupamento — métodos baseados em distância são sensíveis à escala.
- Se você quiser mais clusters, diminua
min_cluster_sizeou mude paracluster_selection_method="leaf". - Para remover pequenos fragmentos ruidosos, mantenha
min_cluster_sizealto emin_samplesmoderado (por exemplo, 5–10). - Combine com UMAP: ajuste o UMAP para projetar dados de alta dimensionalidade em 2–10 dimensões e depois execute HDBSCAN na representação para pipelines não supervisionadas robustas.
5. Referências #
- 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