DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

🧪


🧠 ¿Qué es DBSCAN?

DBSCAN es un algoritmo de clustering que agrupa datos según su densidad, es decir, forma grupos si encuentra suficientes puntos cerca unos de otros. A diferencia de K-Means, no necesita que le digas cuántos grupos hay.

Imagina una ciudad vista desde arriba: DBSCAN encontraría barrios (grupos densos de casas) y separaría las zonas vacías o ruidosas.


🎯 ¿Para qué sirve?

  • Detectar grupos de datos de forma irregular (no solo círculos).
  • Encontrar anomalías o valores atípicos (outliers).
  • Analizar datos espaciales o geográficos.
  • Cuando no sabes cuántos clusters hay.

🔧 ¿Cómo funciona?

Tiene 2 parámetros clave:

  • eps (radio): el tamaño del “barrio”.
  • min_samples: cuántos vecinos debe haber para formar un grupo.

Clasifica puntos en 3 tipos:

  1. Punto central (core point): tiene muchos vecinos cercanos.
  2. Punto frontera: está cerca de un punto central, pero no tiene suficientes vecinos por sí mismo.
  3. Ruido (outlier): no pertenece a ningún grupo.

💥 Ventajas

✅ No necesitas decir cuántos grupos hay
✅ Encuentra formas raras (no solo redondas)
✅ Distingue entre ruido y grupos reales
✅ Ideal para detectar fraudes, anomalías, patrones geográficos


⚠️ Desventajas

❌ Elegir eps y min_samples puede ser difícil
❌ No funciona tan bien si los grupos tienen densidades muy distintas
❌ Sensible a la escala (requiere normalizar los datos)


🧑‍💻 Ejemplo en Python

pythonCopyEditimport pandas as pd
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt

# Datos simulados
data = pd.DataFrame({
    'x': [1, 2, 2, 8, 8, 25, 24, 26, 100],
    'y': [1, 2, 3, 8, 9, 25, 26, 27, 100]
})

# Escalar datos
scaler = StandardScaler()
X_scaled = scaler.fit_transform(data)

# Aplicar DBSCAN
dbscan = DBSCAN(eps=0.8, min_samples=2)
clusters = dbscan.fit_predict(X_scaled)

# Añadir resultados
data['cluster'] = clusters

# Visualizar
plt.scatter(data['x'], data['y'], c=data['cluster'], cmap='rainbow')
plt.title("Clustering con DBSCAN")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

📌 Interpretación del resultado

  • Los puntos con cluster = -1 son ruido o anomalías.
  • El resto son los grupos detectados.

🧩 En resumen

AspectoDetalle
TipoNo supervisado (clustering basado en densidad)
Define # de gruposAutomáticamente
Detecta ruidoSí (outliers)
Forma de gruposLibre (no solo círculos)
Parámetros claveeps, min_samples
Escalado necesario

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *