Programación del Algoritmo K-means en Python
Clase 27 de 28 • Curso de Introducción al Álgebra Lineal: Vectores
Resumen
¿Cómo se implementa el algoritmo K-means en Python?
Si te interesa el clustering en la ciencia de datos, entender e implementar el algoritmo K-means es vital. Esta técnica no supervisada de machine learning ayuda a agrupar nuestros datos en base a características compartidas. A continuación, verás cómo implementar K-means en Python gracias a un ejemplo práctico, paso a paso.
¿Cómo se asignan los puntos a los clústeres?
El primer paso en K-means es la asignación de cada punto de datos al clúster más cercano:
def group_assignment(data, centroids):
assignments = []
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in centroids]
assignments.append(np.argmin(distances))
return assignments
- Entrada: Lista de puntos de datos y centroides iniciales.
- Salida: Cada punto del dataset es asignado al clúster correspondiente.
¿Cómo se actualizan los centroides?
Luego, se ajustan los centroides según el promedio de los puntos asignados a cada clúster:
def update_centroids(data, assignments, num_centroids):
new_centroids = []
for i in range(num_centroids):
assigned_points = [data[j] for j in range(len(data)) if assignments[j] == i]
new_centroids.append(np.mean(assigned_points, axis=0))
return new_centroids
- Entrada: Datos originales, clusterización actual y número de centroides.
- Proceso: Calcula el promedio de puntos asignados a cada clúster para encontrar nuevos centroides.
¿Cómo se mide el desempeño del clúster?
La función objetivo del algoritmo mide cuán bien ajustados están los clústeres:
def clustering_objective(data, assignments, centroids):
total_distance = 0
for i, point in enumerate(data):
centroid_index = assignments[i]
total_distance += np.linalg.norm(point - centroids[centroid_index])**2
return total_distance
Aquí se suman las distancias entre cada punto y su centroide asignado, permitiendo evaluar la calidad de la clusterización.
¿Cómo se ejecuta el algoritmo completo?
El ciclo de ejecución del algoritmo hasta la convergencia involucra la reasignación de puntos y la actualización de centroides:
def kmeans(data, num_centroids, tol=1e-6, max_iterations=300):
centroids = data[np.random.choice(len(data), num_centroids, replace=False)]
for i in range(max_iterations):
assignments = group_assignment(data, centroids)
new_centroids = update_centroids(data, assignments, num_centroids)
if np.all(np.abs(new_centroids - centroids) < tol):
break
centroids = new_centroids
return centroids, assignments
- Iteraciones: Se controla por un límite de iteraciones o una tolerancia mínima de movimiento de los centroides.
- Objetivo: Converger a un estado estable donde los centroides ya no se mueven significativamente.
Estos pasos junto a la capacidad de analizar la evolución del objetivo de clusterización te ayudarán a mejorar tu modelo.
¿Cuál es el reto del usuario?
El desafío final es aplicar estos conocimientos para identificar y clusterizar un conjunto complejo de datos. Utiliza el dataset MINST de números escritos a mano para organizar sus vectores. Si ejecutas correctamente el algoritmo, tus centroides coincidirán con los números del 0 al 9.
Te alentamos a que pruebes este reto, el cual consolidará tu comprensión del algoritmo K-means y mejorará tus habilidades en machine learning. ¡Esperamos tus resultados!