Una vez que ejecutas el algoritmo K-Means y encuentras el valor óptimo de K, es fundamental evaluar los resultados para asegurarte de que los clusters tengan sentido. Aquí tienes formas efectivas de evaluar K-Means:
✅ 1. Silhouette Score (Evaluación numérica)
¿Qué mide?
- Qué tan bien separados y cohesivos están los clusters.
- Va de
-1 (malo) a +1 (muy bueno).
Código:
from sklearn.metrics import silhouette_score
# Asumiendo que ya tienes X (datos) y kmeans.labels\_ (etiquetas)
score = silhouette_score(X, kmeans.labels_)
print(f"Silhouette Score: {score:.3f}")
✅ Un score cerca de 1 es excelente. Cerca de 0 indica clusters solapados. Negativo es mal clustering.
✅ 2. Visualización de Clusters (2D)
¿Para qué sirve?
- Visualmente valida si los grupos son distinguibles.
- Solo se puede usar si tienes 2 o 3 dimensiones, o aplicas reducción como PCA.
Código:
import matplotlib.pyplot as plt
# Asumiendo que usaste kmeans = KMeans(n_clusters=k)
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
s=300, c='red', marker='X', label='Centroides')
plt.title("Visualización de Clusters K-Means")
plt.legend()
plt.show()
✅ 3. Matriz de confusión (si tienes etiquetas reales)
Si estás haciendo clustering sobre datos etiquetados (supervisado), puedes evaluar con exactitud y métricas de clasificación:
from sklearn.metrics import confusion_matrix
import seaborn as sns
# Supongamos que tienes y_true (etiquetas reales) y y_pred (kmeans.labels_)
sns.heatmap(confusion_matrix(y_true, kmeans.labels_), annot=True, fmt="d", cmap="Blues")
plt.xlabel("Etiquetas de KMeans")
plt.ylabel("Etiquetas Reales")
plt.title("Matriz de Confusión")
plt.show()
✅ 4. Silhouette Visualizer (Yellowbrick - opcional)
from yellowbrick.cluster import SilhouetteVisualizer
model = KMeans(n_clusters=k, random_state=42)
visualizer = SilhouetteVisualizer(model)
visualizer.fit(X)
visualizer.show()
📌 Esto muestra la forma y consistencia de cada cluster.
✅ 5. Comparación Intra vs Inter Clúster
- Intra-cluster distance: qué tan compactos son los puntos de cada cluster.
- Inter-cluster distance: qué tan separados están los centroides.
Si lo deseas, puedo ayudarte a programar un pequeño análisis de estas métricas.