¿Qué es el Hierarchical DBSCAN (HDBSCAN)?

| Última modificación: 7 de noviembre de 2024 | Tiempo de Lectura: 3 minutos

En este artículo te explicaremos qué es el Hierarchical DBSCAN y cómo usarlo por medio de un ejercicio de aplicación.

El Hierarchical DBSCAN esencialmente calcula la jerarquía de todos los clústeres de DBSCAN para un minPts dato. Luego utiliza una estabilidad basada en el método de extracción para encontrar cortes óptimos en la jerarquía, por lo que produce una solución plana.

Ejercicio aplicando Hierarchical DBSCAN

Hay que tener en cuenta que minPts no solo actúa como un tamaño mínimo de clúster para detectar, sino también como un factor de suavizado de las estimaciones de densidad calculado implícitamente desde Hierarchical DBSCAN.

set.seed (123)
N <- 1000
x <- c (rnorm (N, mean = 1, sd = 0.5), rnorm(N, mean = 3.5, sd = 0.5), rnorm (2 * N, mean = 8, sd = 1))
df <- data.frame (x = x, y = runif (length (x)))
head (df)
xy
<dbl><dbl>
10.71976220.5779101
20.88491130.4888454
31.77935420.7421904
41.03525420.2256090
51.06464390.7488911
61.85753250.85248685
library (ggplot2)
options (repr.plot.height = 2, repr.plot.width = 6, repr.plot.res = 300)

ggplot (df, aes (x = x, y = y)) + geom_point (size = 0.1) + geom_density2d (h = c (1, 2))
Hierarchical DBSCAN
ggplot (df, aes (x = x)) + geom_density (bw = 0.15)
HIERARCHICAL dbscan
library (dbscan)
minPts <- 500

cl <- hdbscan (df [ , c ("x", "y")], minPts = minPts.gen_simplified_tree = TRUE, gen_hdbscan_tree = TRUE)

Hierarchical DBSCAN no es más que una ejecución de DBSCAN para diferentes valores de epsilon.

Vamos a demostrarlo a continuación:

options (repr.plot.height = 4, repr.plot.width = 6, repr.plot.res = 300)

plot (clshc)
HIERARCHICAL dbscan
## cutree no distingue el ruido como 0, por lo que creamos un nuevo método para hacerlo manualmente
cut tree <- function (hcl, eps, core_dist) {
cuts [which (core_dist > eps)] <- 0 #Usa la distancia del núcleo para distinguir las opciones de corte de ruido
cuts
}
cor_dist <- kNNdist (df [ , c ("x", "y")], k = cl$minPts - 1)
plot (sort (core_dist), t = 'l')
options (repr.plot.height = 2, repr.plot.width = 6, repr.plot.res = 300)
HIERARCHICAL dbscan
eps_value = 0.7
#eps_value = 1.2
#eps_value = 1.5

cut cl <- cut_tree (cl$hc, eps_value, core_dist)

dbscan_cl <- dbscan (df [ , c ("x", "y")], eps = eps_value, minPts = minPts, borderPoints = F)

(all.equal (rle (cut_cl) $lengths, rle (dbscan_clscluster) slengths) == "TRUE")
#Ejemplo de como funciona rle
#c (rep (6 : 10, 1 : 5), 6, 6)
#rle (c (rep (6 : 10, 1 : 5), 6, 6))

TRUE

cut cl <- cutree (cl$hc, h = 1.2)
table (cut_cl)
table (dbscan_cl$cluster)
cut_cl
0
1319
1
671
333
627
705
1383
0
1319
1
671
2
627
3
1383
dfscluster <- factor (cut_cl)
#df$cluster <- factor (dbscan_cl$cluster)
ggplot (df, aes (x = x, y = y, color = cluster)) + geom_point (size = 0.1)
HIERARCHICAL dbscan

Estabilidad de clústers

cl <- hdbscan (df [ , c ("x", "y")], minPts = minPts.gen_simplified_tree = TRUE, gen_hdbscan_tree = TRUE)
cl

HDBSCAN (HIERARCHICAL dbscan) clustering for 4000 objects.

Parameters: minPits = 500

El clustering contiene 3 clúster(s) y 411 puntos de ruido.

0123
4111876855858

Avalaible fields: cluster, minPts, cluster_scores, membership_prob, outlier_scores, hc, hdbscan_tree, simplified_tree

df$cluster <- as.factor(cl$cluster)
options (repr.plot.height = 2, repr.plot.width = 6, repr.plot.res = 300)
ggplot (df, aes (x = x, y = y, color = cluster)) + geom_point (size = 0.1)
HIERARCHICAL dbscan

Continuando con el ejercicio de Hierarchical DBSCAN, para calcular la estabilidad definimos λ = l / i. Suponiendo que vamos probando con valores E decrecientes, lo que equivale a λ creciente. Para un clúster podemos definir los valores λbirth y λdeath como el valor de λ en el cual el clúster aparece (como división de un clúster mayor) y desaparece al dividirse en clústeres más pequeños.

Podemos definir λ como el valor en el intervalo [λbirth , λdeath], en el que el punto p se escapa del clúster estudiado.

Se define la estabilidad de un clúster como:

HIERARCHICAL dbscan

Finalmente, se hace un recorrido de abajo arriba del árbol; empezando por las hojas, calculamos la estabilidad de cada uno de los clústeres que van saliendo a medida que subimos (disminuimos).

¿Qué sigue?

El Hierarchical DBSCAN es un algoritmo de mucha utilidad en algunas ocasiones en las que necesitas hacer procesos de clustering. Recuerda que, si quieres seguir aprendiendo sobre todas estas temáticas, puedes inscribirte en nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva con la que en muy pocos meses podrás adquirir todos los conocimientos necesarios para incursionar en el mercado laboral. ¡Anímate y solicita más información!

HIERARCHICAL dbscan
Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

BIG DATA, IA & MACHINE LEARNING

Full Stack Bootcamp

Clases en Directo | 9 meses | 12 horas lectivas semanales | Acceso a +600 empresas | Sueldos de hasta 80K | 99.24% de empleabilidad