Saltar al contenido

K-means

K-Means es un potente algoritmo de aprendizaje no supervisado utilizado para agrupar y clasificar puntos de datos similares. Se aplica ampliamente en la segmentación de imágenes, el procesamiento del lenguaje natural y la segmentación de mercados. Esta guía cubre los conceptos fundamentales, la implementación y consejos prácticos para usar K-Means de manera efectiva.

¿Qué es el clustering K-Means?

K-Means es un algoritmo de clustering que agrupa puntos de datos en función de su similitud. Es una técnica de aprendizaje no supervisado que no requiere datos etiquetados para el entrenamiento. El algoritmo funciona dividiendo un conjunto de datos en K grupos, donde K es un parámetro definido por el usuario que especifica el número de grupos. El algoritmo K-Means tiene como objetivo minimizar la suma de las distancias al cuadrado entre los puntos de datos y los centroides de sus grupos asignados.

¿Cómo funciona el clustering K-Means?

El algoritmo K-Means funciona en los siguientes pasos:

  1. Inicialización: Elegir K puntos de datos aleatorios como centroides iniciales.
  2. Asignación: Asignar cada punto de datos al centroide más cercano.
  3. Recálculo: Recalcular el centroide de cada grupo tomando la media de todos los puntos de datos asignados a ese grupo.
  4. Repetición: Repetir los pasos 2 y 3 hasta la convergencia o hasta alcanzar un número máximo de iteraciones.

Ventajas del clustering K-Means

El clustering K-Means tiene varias ventajas, entre ellas:

  1. Fácil de implementar e interpretar.
  2. Escalable para conjuntos de datos grandes.
  3. Aplicable a diversos tipos de datos.
  4. Puede utilizarse para la detección de valores atípicos.

Desventajas del clustering K-Means

El clustering K-Means también tiene algunas limitaciones, como:

  1. Sensibilidad a la inicialización: La calidad del resultado final del clustering depende de los centroides iniciales.
  2. Elección del número óptimo de grupos: El número de grupos debe especificarse de antemano, lo cual puede ser un desafío.
  3. Solo funciona bien con grupos esféricos: K-Means asume que los grupos son esféricos, lo cual puede no ser cierto para todos los conjuntos de datos.

Implementación del clustering K-Means en Python

Para implementar el clustering K-Means en Python, utilizaremos la biblioteca scikit-learn. Antes del clustering, es importante escalar tus características, ya que K-Means se basa en cálculos de distancia y es muy sensible a los datos numéricos no escalados.

Clustering K-Means con escalado y visualización

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

# Generate sample data
X, y = make_blobs(n_samples=1000, centers=3, random_state=42)

# Scale the features
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Create KMeans instance with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X_scaled)

# Get cluster labels directly from the fitted model
labels = kmeans.labels_

# Visualize the results
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=labels, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', marker='X', s=200, label='Centroids')
plt.legend()
plt.show()

En este ejemplo, generamos datos de muestra, los escalamos y ajustamos el modelo KMeans. Recuperamos las asignaciones de grupo utilizando el atributo labels_, lo cual es más eficiente que llamar a predict() después del ajuste. La visualización confirma que el algoritmo agrupó correctamente los puntos de datos alrededor de sus centroides.

Selección del número óptimo de grupos (K)

Dado que K debe especificarse de antemano, el método del codo (Elbow method) se utiliza comúnmente para encontrar el valor óptimo. Grafica la suma de cuadrados intragrupo (WCSS) frente a diferentes valores de K. El punto del "codo" indica el mejor equilibrio entre la complejidad del modelo y la varianza.

python
wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i, random_state=42)
    kmeans.fit(X_scaled)
    wcss.append(kmeans.inertia_)

plt.plot(range(1, 11), wcss, marker='o')
plt.xlabel('Number of clusters (K)')
plt.ylabel('WCSS')
plt.show()

Conclusión

El clustering K-Means es una técnica fundamental de aprendizaje no supervisado para agrupar puntos de datos similares. Al comprender su funcionamiento, aplicar el escalado de características y utilizar métodos como la gráfica del codo para seleccionar K, puedes implementarlo de manera efectiva en diversas tareas de análisis de datos.

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.