K-Means en Python

K-Means es un algoritmo de clustering no supervisado que se utiliza para dividir un conjunto de datos en grupos basados en similitud. El objetivo principal es dividir los datos en K clústeres, donde K es un número predefinido.


Pasos del algoritmo K-Means

El algoritmo K-Means consta de los siguientes pasos:

  • Inicialización : Selecciona aleatoriamente K centroides iniciales (puntos representativos de los clústeres).
  • Asignación : Asigna cada punto de datos al centroide más cercano. Cada punto se une a un clúster según su distancia al centroide.
  • Actualización : Recalcula los centroides de cada clúster como el promedio de todos los puntos asignados a ese clúster.
  • Convergencia : Repite los pasos 2 y 3 hasta que los centroides ya no cambien significativamente o se alcance un número máximo de iteraciones.
  • Resultado : Los centroides finales representan los clústeres.

Implementación en Python

Vamos a ver cómo implementar K-Means en Python usando la biblioteca scikit-learn :

Ejemplo

    # Obtener los c
# Obtener los centroides y las etiquetas de los clústeres
centroids = kmeans.cluster_centers_
labels = kmeans.labels_
# Visualiza
# Visualizar los resultados
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=200, c='red')
plt.show()
  

Selección del número óptimo de clústeres

Seleccionar el número óptimo de clústeres (K) es un paso crítico en K-Means. Una forma de hacerlo es utilizando el método "codo" (Elbow Method), que implica probar diferentes valores de K y observar cómo disminuye la varianza intraclúster a medida que aumenta K. El punto donde la disminución se aplana (como un codo en un gráfico) es una buena estimación de K.


Ventajas y desventajas

Ventajas :

  • Fácil de implementar y entender.
  • Eficiente en términos computacionales.
  • Funciona bien con grandes conjuntos de datos.

Desventajas :

  • Sensible a la inicialización de los centroides.
  • No garantiza la convergencia al resultado óptimo global.
  • No es adecuado para datos con formas irregulares o tamaños de clúster desiguales.

Aplicaciones de K-Means

K-Means se utiliza en diversas aplicaciones, como:

  • Segmentación de clientes.
  • Compresión de imágenes.
  • Procesamiento de datos y análisis de texto.
  • Análisis de datos geoespaciales.

En resumen, K-Means es un algoritmo de clustering ampliamente utilizado en el campo del aprendizaje automático y la minería de datos para agrupar datos similares en clústeres. Con una buena comprensión de cómo funciona y cómo implementarlo en Python, puedes aplicarlo a una variedad de problemas de clustering.

Practica K-Means en Python en el editor

Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.

Ejercicio: Diagrama de dispersión

Vamos a ver cómo implementar K-Means en Python usando la biblioteca scikit-learn.

Ejemplo

    # Obtener los c
# Obtener los centroides y las etiquetas de los clústeres
centroids = kmeans.cluster_centers_
labels = kmeans.labels_
# Visualiza
# Visualizar los resultados
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=200, c='red')
plt.show()
  
Abrir en editor

Ejercicio: Entrenar K-Means

Agrupa puntos aleatorios en 3 clústeres sin gráfico.

Ejemplo

    print("Práctica 216")
valores = [1, 2, 3]
print(sum(valores))
  
Abrir en editor

Ejercicio: Predecir clúster de un punto

Usa predict() para clasificar nuevas observaciones.

Ejemplo

    d = {"nombre": "Elena", "ciudad": "Valencia"}
print(d)
print(d.keys())
  
Abrir en editor

Ejercicio: Inercia del modelo

Compara la inercia (suma de distancias) al variar K.

Ejemplo

    import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
  
Abrir en editor