K-Means Clustering (Clustering basado en centroides) [Ejercicio]

Algoritmo K-Means Clustering (Clustering basado en centroides)

El algoritmo K-Means es uno de los más populares para realizar clustering. El objetivo de este algoritmo es dividir un conjunto de datos en un número fijo de grupos (o "clusters"), que se determinan a partir de la cercanía entre los puntos de datos y un centroide. El algoritmo sigue un enfoque iterativo para asignar cada punto de datos al cluster más cercano y luego actualizar los centroides de cada cluster hasta que se alcance la convergencia.

El parámetro principal de K-Means es k, que especifica el número de clusters que se desean encontrar.


Pasos del algoritmo K-Means:

  1. Inicializar k centroides aleatorios.
  2. Asignar cada punto al centroide más cercano.
  3. Recalcular los centroides de los clusters, basándose en la media de los puntos asignados a cada cluster.
  4. Repetir los pasos 2 y 3 hasta que los centroides no cambien significativamente (convergencia).

Ejercicio práctico con K-Means

Ver en Colab ➜

1. Generar datos sintéticos:

Usaremos el conjunto de datos make_blobs para generar datos que tienen una estructura clara de clusters, lo cual es ideal para probar el algoritmo K-Means.

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Generamos datos sintéticos con 3 clusters
X, y = make_blobs(n_samples=300, centers=3, random_state=42)

# Visualizamos los datos generados
plt.scatter(X[:, 0], X[:, 1], c='blue', s=50)
plt.title("Datos generados (3 clusters)")
plt.xlabel("Característica 1")
plt.ylabel("Característica 2")
plt.show()

Explicación:

  • make_blobs: Genera un conjunto de datos de muestra con varios clusters. En este caso, hemos creado 3 clusters.
  • Luego visualizamos los datos generados con scatter.

2. Aplicar el algoritmo K-Means:

# Creamos el modelo de KMeans con k=3 (3 clusters)
kmeans = KMeans(n_clusters=3, random_state=42)

# Ajustamos el modelo a los datos X
kmeans.fit(X)

# Obtenemos las predicciones de los clusters
y_pred = kmeans.predict(X)

# Obtenemos los centroides de los clusters
centroids = kmeans.cluster_centers_

# Visualizamos los datos y los centroides
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, marker='X', label='Centroides')
plt.title("Clusters predichos por K-Means y sus centroides")
plt.xlabel("Característica 1")
plt.ylabel("Característica 2")
plt.legend()
plt.show()

Explicación:

  1. Creamos un modelo KMeans con n_clusters=3, ya que sabemos que nuestros datos tienen 3 clusters.
  2. Aplicamos el método fit para entrenar el modelo con los datos X.
  3. Usamos predict para obtener las etiquetas (clusters asignados) para cada punto.
  4. cluster_centers_: Al entrenar el modelo, K-Means calcula los centroides de los clusters. Esto nos da las coordenadas de los centros de los 3 clusters encontrados.
  5. Finalmente, visualizamos los puntos de datos coloreados según el cluster al que pertenecen, y representamos los centroides con un símbolo de "X" roja.

3. Interpretar los resultados:

En el gráfico que generamos, cada punto se muestra con el color del cluster al que ha sido asignado por el algoritmo. Los centroides de los clusters se marcan con un "X" roja.

  • Los puntos cercanos a un centroide serán asignados a ese cluster.
  • Al final del proceso, los centroides se moverán hacia la media de los puntos asignados a su cluster. Este proceso continuará hasta que los centroides no cambien significativamente entre iteraciones (convergencia).

4. Evaluar el rendimiento del modelo:

Podemos evaluar qué tan bien ha agrupado K-Means con el inercia o suma de distancias al cuadrado de los puntos al centroide más cercano.

# Inercia: medida de la calidad del clustering
print("Inercia:", kmeans.inertia_)

Explicación:

  • La inercia mide qué tan "compactos" están los clusters. Un valor más bajo de inercia indica que los puntos dentro de cada cluster están más cerca de sus respectivos centroides, lo que implica un mejor agrupamiento.

Conclusión:

Este ejercicio muestra cómo usar el algoritmo K-Means para realizar clustering en un conjunto de datos. El algoritmo es útil para dividir datos en grupos con características similares y se puede usar en una variedad de aplicaciones, como segmentación de clientes, análisis de imágenes, etc. A través del gráfico generado, podemos ver cómo el modelo agrupa los puntos en tres clusters y calcula sus centroides.

Conceptos claves de K-Means:

  • Centroides: Los puntos representativos de cada cluster.
  • Inercia: Medida de la calidad del clustering, menor inercia indica mejor calidad.
  • K: Número de clusters que se desea obtener (predefinido).
  • Iteraciones: El algoritmo ajusta los centroides hasta que convergen.

Posibles mejoras:

  • El número de clusters k se puede elegir de manera más sofisticada utilizando técnicas como el método del codo o la silhouette score.