Emanuel Fitta

K Means

Dentro de los algoritmos de aprendizaje no supervisado en Machine Learning, uno de los más utilizados es K-Means. Este algoritmo es ampliamente empleado para la segmentación de clientes, detección de patrones y reducción de dimensionalidad.

K-Means funciona agrupando datos en K clusters basándose en su similitud, minimizando la distancia dentro de cada grupo. Aunque es eficiente y fácil de implementar, puede verse afectado por la elección inicial de los centroides y la forma de los datos.

En este artículo, exploraremos cómo funciona K-Means, sus ventajas y desventajas, y su implementación tanto en Python como en R.

¿Cómo funciona el algoritmo?

Este algoritmo opera de forma iterativa, repitiendo un conjunto de pasos hasta que los centroides converjan, es decir, hasta que sus posiciones dejen de cambiar significativamente entre iteraciones. Este proceso garantiza que los datos queden agrupados de manera óptima dentro de cada cluster.

A continuación, encontrarás una aplicación interactiva que muestra el paso a paso del algoritmo KMeans.

Primero, seleccionamos los parámetros iniciales: la cantidad de observaciones que tendrá nuestro dataset de prueba, el grado de dispersión de los puntos con los que trabajaremos, y el número de clusters que esperamos obtener. Es importante recordar que, en este algoritmo, debemos conocer de antemano el número de clusters.

Finalmente, se establece el parámetro de "semilla de aleatoriedad" o random state, que se utilizará para definir los centroides iniciales como para garantizar que los resultados sean reproducibles.

Debajo del gráfico encontrarás un botón que te lleva a la siguiente iteración dentro del algoritmo, cuando este converja, la aplicación te lo hará saber y esto significará que se han encontrado los clusters finales.

Algoritmo KMeans

Del lado izquierdo el algoritmo tradicional de KMeans donde se incializan los centroides de manera aleatoria. Del lado derecho el algoritmo KMeans++ donde la inicialización de centroides asegura convergencia.

Tipos de distancias

KMeans es un algoritmo que, como se vió antes se basa en construir los clusters o segmentos tomando los puntos más cercanos a cada centroide. Sin embargo, el concepto de cercanía depende por completo de como se mida la distancia en espacio donde viven los puntos. A continuación hablaremos de algunas de las principales formas de medir distancia para este algoritmo.

Variación de KMeans: KMeans++

KMeans++ es una variación sobre el algoritmo clásico de KMeans que busca mejorar la selección de los centroides iniciales para evitar la convergencia a soluciones subóptimas. En el KMeans tradicional, los centroides iniciales se eligen de manera aleatoria, lo que puede llevar a que el algoritmo converja a una solución subóptima o tarde mucho en hacerlo, especialmente si los centroides iniciales están muy dispersos o cerca de puntos no representativos del dataset.

Esta manera de seleccionar los centroides iniciales tiene como objetivo maximizar la distancia entre los puntos seleccionados. Este procedimiento ayuda a que los centroides iniciales estén mejor distribuidos y, por lo tanto, el algoritmo converge más rápido y con mayor probabilidad de encontrar una mejor solución.

El proceso de selección de centroides en KMeans++ sigue estos pasos:

Ejemplo de implementación

from sklearn.cluster import KMeans
import numpy as np
# Generar datos de ejemplo
np.random.seed(42)
X = np.random.rand(100, 2)  # 100 puntos con 2 características

# Configuración del modelo K-Means con todos los parámetros
kmeans = KMeans(
    n_clusters=3,      # Número de clusters
    init='k-means++',  # Inicialización ('random' o 'k-means++')
    n_init=10,         # Número de inicializaciones diferentes
    max_iter=300,      # Iteraciones máximas
    tol=1e-4,          # Tolerancia de convergencia
    random_state=42,   # Semilla para reproducibilidad
    algorithm='lloyd', # Algoritmo ('lloyd', 'elkan')
)
# Ajustar modelo y obtener etiquetas
kmeans.fit(X)

Ver la discusión en LinkedIn