Para evaluar los resultados de DBSCAN, puedes utilizar diversas métricas y visualizaciones. Aquí te explico los enfoques más comunes:
✅ 1. Visualización de los clústeres
La forma más directa de evaluar DBSCAN es visualizar los clústeres:
import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=y_dbscan, cmap='plasma')
plt.title("Resultados de DBSCAN")
plt.xlabel("Componente 1")
plt.ylabel("Componente 2")
plt.grid(True)
plt.show()
- Los ruidos serán etiquetados como
-1.
- Colores diferentes representan diferentes clústeres.
✅ 2. Silhouette Score
Evalúa qué tan bien está cada punto dentro de su clúster:
from sklearn.metrics import silhouette_score
labels = y_dbscan
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
if n_clusters > 1:
score = silhouette_score(X, labels)
print(f"Silhouette Score: {score:.3f}")
else:
print("No se pueden calcular métricas: hay menos de 2 clústeres.")
🎯 Interpretación: Cuanto más cercano a 1, mejor. Valores < 0 indican mala asignación.
✅ 3. Número de clústeres y ruido
Puedes revisar cuántos clústeres encontró DBSCAN y cuántos puntos consideró como ruido:
import numpy as np
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
n_noise = list(labels).count(-1)
print(f"Número de clústeres encontrados: {n_clusters}")
print(f"Número de puntos de ruido: {n_noise}")
✅ 4. Confusión con etiquetas reales (si existen)
Si tienes etiquetas verdaderas (y_true), puedes usar métricas como Adjusted Rand Index (ARI) o Homogeneity Score:
from sklearn.metrics import adjusted_rand_score, homogeneity_score
print("ARI:", adjusted_rand_score(y_true, y_dbscan))
print("Homogeneidad:", homogeneity_score(y_true, y_dbscan))
✅ 5. Silhouette Visualizer (opcional)
Si tienes instalado yellowbrick, puedes usar un gráfico de silueta:
from yellowbrick.cluster import SilhouetteVisualizer
from sklearn.cluster import DBSCAN
visualizer = SilhouetteVisualizer(DBSCAN(eps=0.3, min_samples=5))
visualizer.fit(X)
visualizer.show()
Asegúrate de que haya más de un clúster para que esto funcione.