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()
Ejercicio: Entrenar K-Means
Agrupa puntos aleatorios en 3 clústeres sin gráfico.
Ejercicio: Predecir clúster de un punto
Usa predict() para clasificar nuevas observaciones.
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)