DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
DBSCAN agrupa puntos muy próximos en agrupaciones de cualquier forma y etiqueta los puntos dispersos como ruido, sin fijar de antemano el número de agrupaciones. Incluye código.
DBSCAN (agrupamiento espacial basado en densidad de aplicaciones con ruido) es un algoritmo de aprendizaje no supervisado que agrupa en clústeres los puntos muy próximos y etiqueta como ruido los puntos de regiones poco densas. Martin Ester, Hans-Peter Kriegel, Jörg Sander y Xiaowei Xu lo presentaron en la conferencia KDD de 1996. No requiere fijar de antemano el número de clústeres, detecta clústeres de cualquier forma —como anillos, medias lunas o carreteras sinuosas— y su etiqueta de ruido también funciona como una forma sencilla de detección de anomalías. Todo el algoritmo se controla con dos parámetros: el radio del vecindario y el número de puntos que hacen que un vecindario se considere denso.
Puntos centrales, puntos frontera y ruido#
DBSCAN examina el vecindario de cada punto, es decir, el conjunto de puntos situados a una distancia eps, y cuenta sus elementos:
- Punto central: tiene al menos
min_samplespuntos en su vecindario, incluido él mismo en la implementación de scikit-learn. Los puntos centrales forman el interior denso de un clúster. - Punto frontera: no tiene suficientes vecinos para ser un punto central, pero está a una distancia
epsde uno. Los puntos frontera forman los bordes de un clúster. - Punto de ruido: no es ninguna de las dos cosas, así que no pertenece a ningún clúster y recibe la etiqueta -1.
Un clúster crece a partir de cualquier punto central que aún no se haya visitado. DBSCAN añade todos los puntos de su vecindario y, después, repite el proceso desde cada nuevo punto central añadido hasta que no se pueda llegar a más puntos; así, una cadena de vecindarios densos superpuestos forma un solo clúster, por muchas curvas que tenga. Los puntos frontera se incorporan al clúster, pero no lo amplían. El resultado es determinista para un orden de entrada dado, pero un punto frontera al que se pueda llegar desde dos clústeres se une al que lo alcance primero; por tanto, al barajar los datos, los puntos frontera pueden cambiar de clúster.
Cómo elegir eps y min_samples#
El radio eps es el factor más importante y depende de la escala de los datos; por eso, normalmente se estandarizan primero las características. Si el radio es demasiado pequeño, la mayoría de los puntos quedan como ruido; si es demasiado grande, se fusionan los clústeres vecinos. La heurística habitual ordena las distancias de cada punto a su k-ésimo vecino más cercano, con k igual a min_samples, y elige eps en el codo de esa curva, donde las distancias empiezan a aumentar bruscamente. Los valores más altos de min_samples hacen que el agrupamiento tolere mejor el ruido y son habituales en conjuntos de datos grandes o ruidosos. En espacios de alta dimensionalidad, como los de los embeddings de imágenes, las distancias entre puntos tienden a parecerse, así que los profesionales suelen aplicar una reducción de dimensionalidad, como el análisis de componentes principales (PCA), antes de ejecutar DBSCAN.
DBSCAN frente a k-means y HDBSCAN#
El agrupamiento k-means requiere conocer de antemano el número de clústeres, asigna cada punto al centroide más cercano y, por tanto, favorece los clústeres compactos y redondeados, además de incorporar los valores atípicos a algún grupo. DBSCAN descubre el número de clústeres a partir de la densidad y deja fuera los valores atípicos. Su punto débil es contar con un único eps global: si los clústeres tienen densidades muy distintas, ningún radio separa a la vez los clústeres dispersos del ruido y los clústeres densos entre sí. HDBSCAN aborda este problema ejecutando, en la práctica, DBSCAN con todos los valores de eps y conservando los clústeres más estables. Ambos algoritmos están disponibles en el módulo de agrupamiento de scikit-learn, junto con OPTICS, que está relacionado.
Este ejemplo agrupa dos medias lunas entrelazadas con 20 valores atípicos aleatorios añadidos y compara cada resultado con los grupos verdaderos mediante el índice Rand ajustado, en el que 1.0 representa una coincidencia perfecta:
import numpy as np
from sklearn.cluster import DBSCAN, KMeans
from sklearn.datasets import make_moons
from sklearn.metrics import adjusted_rand_score
# Two interleaving crescents plus 20 scattered outliers (true label -1)
X, y = make_moons(n_samples=300, noise=0.05, random_state=0)
rng = np.random.default_rng(0)
X = np.vstack([X, rng.uniform(-1.5, 2.5, size=(20, 2))])
y = np.concatenate([y, np.full(20, -1)])
# DBSCAN infers clusters from density; k-means is told there are 2
db_labels = DBSCAN(eps=0.2, min_samples=5).fit_predict(X)
km_labels = KMeans(n_clusters=2, random_state=0).fit_predict(X)
print(f"DBSCAN: {db_labels.max() + 1} clusters, {(db_labels == -1).sum()} noise points")
print(f"ARI: DBSCAN {adjusted_rand_score(y, db_labels):.2f}, k-means {adjusted_rand_score(y, km_labels):.2f}")El script muestra 2 clústeres y 15 puntos de ruido para DBSCAN, e índices Rand ajustados de 0.97 para DBSCAN y 0.20 para k-means. DBSCAN sigue ambas medias lunas y aparta los valores atípicos que quedan lejos de ellas, mientras que k-means corta las medias lunas con una frontera recta, aunque se le haya indicado el número correcto de clústeres.
Aplicaciones en el mundo real#
- Percepción LiDAR: los flujos de trabajo de vehículos autónomos y robótica eliminan los puntos del suelo de un barrido LiDAR y agrupan después los puntos 3D restantes en obstáculos independientes. El agrupamiento basado en la densidad es una opción habitual porque se desconoce el número de objetos.
- Posprocesamiento de detecciones: los centros de las cajas de las detecciones de YOLO26, disponibles como
result.boxes.xywh, se pueden agrupar con DBSCAN para encontrar grupos de personas entre una multitud o ubicaciones recurrentes de defectos en una línea de producción; las detecciones aisladas quedan clasificadas como ruido. - Supervisión del fraude y de los sensores: Las transacciones o lecturas etiquetadas con -1 están lejos de todos los grupos densos de comportamiento normal y se convierten en candidatas a revisión.
- Análisis geoespacial: Las empresas de reparto y de transporte con conductor agrupan puntos GPS para encontrar paradas frecuentes y zonas populares de recogida. DBSCAN de Scikit-learn acepta
metric="haversine"para la latitud y la longitud en radianes; en ese caso,epses un ángulo sobre la esfera unitaria, por lo que un radio de 100 metros se convierte eneps = 0.1 / 6371, usando el radio medio de la Tierra de 6.371 km.










