Programación del Algoritmo K-means en Python

Clase 28 de 29Curso 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!