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.
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()
scatter
.# 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:
KMeans
con n_clusters=3
, ya que sabemos que nuestros datos tienen 3 clusters.fit
para entrenar el modelo con los datos X
.predict
para obtener las etiquetas (clusters asignados) para cada punto.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.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.
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:
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.
Posibles mejoras:
k
se puede elegir de manera más sofisticada utilizando técnicas como el método del codo o la silhouette score.