Clase 5: DBSCAN
Se basan en la idea de continuar el crecimiento de un cluster a medida que la densidad (número de objetos o puntos) en el vecindario sobrepase algún umbral.
En nuestro caso utilizaremos DBSCAN (Density-Based Spatial Clustering Applications with Noise).
Hiperparámetros del Modelo
eps
: Radio de análisisMinPts
: Corresponde al mínimo de puntos necesarios en un Radio eps
.Densidad es el número de puntos dentro del radio
eps
.
Un punto central/core es aquel que tiene al menos
MinPts
puntos dentro de la esfera definida poreps
(se incluye él mismo).
Un punto de borde tiene menos puntos que
MinPts
deleps
, pero está dentro de la esfera de un punto central.
Un punto de ruido es todo aquel que no es punto central ni de borde.
Primeramente se aplica un algoritmo para categorizar cada punto de acuerdo a las definiciones anteriores.
Supongamos un ejemplo con \(MinPts=4\).
Ahora, ¿Cómo definimos que partes son clusters o no?
Se aplica el siguiente algoritmo para calcular clusterings.
Antes de aplicar se desechan los Noise Points ya que no serán considerados. (Veremos luego que ocurre con estos puntos).
Todos los puntos cercanos a un Core reciben la misma etiqueta.
En este caso obtuvimos 2 clusters, e indirectamente un 3er de puntos ruido.
¿Sería posible replicar un proceso de Clustering similar utilizando K-Means? ¿Por qué?
Fortalezas
Debilidades
Para encontrar EPS se suele utilizar el método de Vecinos más cercanos.
La distancia de los puntos dentro de un cluster a su k-ésimo vecino deberían ser similares.
Luego, los puntos atípicos (o ruidosos) tienen el k-ésimo vecino a una mayor distancia.
💡 Podemos plotear la distancia ordenada de cada punto a su k-ésimo vecino y seleccionar un eps
cercano al crecimiento exponencial (codo).
from sklearn.cluster import DBSCAN
dbs = DBSCAN(min_samples = 5, eps = 0.5, metric = "euclidean")
## Se entrena y se genera la predicción
dbs.fit_predict(X)
min_samples: Corresponde a minPts. Por defecto 5.
eps: Corresponde al radio de la esfera en la que se buscan los puntos cercanos. Por defecto 0.5.
metric: Corresponde a la distancia utilizada para medir la distancia. Permite todas las distancias mencionadas acá.
.fit_predict()
: Entrenará el modelo en los datos suministrados e inmediatamente genera el cluster asociado a cada elemento. Adicionalmente los puntos ruidosos se etiquetarán como -1.
👀 Veamos un ejemplo.