Algoritmos de agrupación: algoritmo de K-medias

Introducción al algoritmo K-Means

El algoritmo de agrupamiento de K-means calcula los centroides e itera hasta encontrar el centroide óptimo. Supone que ya se conoce el número de agrupaciones. También es llamadoflat clusteringalgoritmo. El número de conglomerados identificados a partir de datos por algoritmo está representado por 'K' en K-medias.

En este algoritmo, los puntos de datos se asignan a un grupo de tal manera que la suma de la distancia al cuadrado entre los puntos de datos y el centroide sería mínima. Debe entenderse que una menor variación dentro de los grupos dará lugar a puntos de datos más similares dentro del mismo grupo.

Trabajo del algoritmo de K-medias

Podemos comprender el funcionamiento del algoritmo de agrupación de K-Means con la ayuda de los siguientes pasos:

  • Step 1 - Primero, necesitamos especificar el número de clústeres, K, que debe generar este algoritmo.

  • Step 2- A continuación, seleccione aleatoriamente K puntos de datos y asigne cada punto de datos a un grupo. En palabras simples, clasifique los datos según el número de puntos de datos.

  • Step 3 - Ahora calculará los centroides del clúster.

  • Step 4 - A continuación, siga iterando lo siguiente hasta que encontremos el centroide óptimo, que es la asignación de puntos de datos a los clústeres que ya no están cambiando -

4.1 - Primero, se calcularía la suma de la distancia al cuadrado entre los puntos de datos y los centroides.

4.2 - Ahora, tenemos que asignar cada punto de datos al grupo que está más cerca que otro grupo (centroide).

4.3 - Por fin, calcule los centroides de los grupos tomando el promedio de todos los puntos de datos de ese grupo.

K-means sigue Expectation-Maximizationenfoque para resolver el problema. El paso de expectativa se usa para asignar los puntos de datos al grupo más cercano y el paso de maximización se usa para calcular el centroide de cada grupo.

Mientras trabajamos con el algoritmo K-means, debemos ocuparnos de las siguientes cosas:

  • Al trabajar con algoritmos de agrupación en clústeres que incluyen K-Means, se recomienda estandarizar los datos porque dichos algoritmos utilizan mediciones basadas en la distancia para determinar la similitud entre los puntos de datos.

  • Debido a la naturaleza iterativa de K-Means y la inicialización aleatoria de centroides, K-Means puede quedarse en un óptimo local y no converger al óptimo global. Por eso se recomienda utilizar diferentes inicializaciones de centroides.

Implementación en Python

Los siguientes dos ejemplos de implementación del algoritmo de agrupación de K-Means nos ayudarán a comprenderlo mejor:

Ejemplo 1

Es un ejemplo sencillo para entender cómo funciona k-means. En este ejemplo, primero generaremos un conjunto de datos 2D que contiene 4 blobs diferentes y luego aplicaremos el algoritmo k-means para ver el resultado.

Primero, comenzaremos importando los paquetes necesarios:

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans

El siguiente código generará el 2D, que contiene cuatro blobs:

from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)

A continuación, el siguiente código nos ayudará a visualizar el conjunto de datos:

plt.scatter(X[:, 0], X[:, 1], s=20);
plt.show()

A continuación, cree un objeto de KMeans junto con el número de clústeres, entrene el modelo y haga la predicción de la siguiente manera:

kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

Ahora, con la ayuda del siguiente código, podemos trazar y visualizar los centros del clúster seleccionados por el estimador de Python de k-medias:

plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=20, cmap='summer')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='blue', s=100, alpha=0.9);
plt.show()

Ejemplo 2

Pasemos a otro ejemplo en el que vamos a aplicar la agrupación de K-medias en un conjunto de datos de dígitos simples. K-means intentará identificar dígitos similares sin utilizar la información de la etiqueta original.

Primero, comenzaremos importando los paquetes necesarios:

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans

A continuación, cargue el conjunto de datos de dígitos de sklearn y conviértalo en un objeto. También podemos encontrar el número de filas y columnas en este conjunto de datos de la siguiente manera:

from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Salida

(1797, 64)

El resultado anterior muestra que este conjunto de datos tiene 1797 muestras con 64 características.

Podemos realizar la agrupación como hicimos en el Ejemplo 1 anterior:

kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape

Salida

(10, 64)

El resultado anterior muestra que K-means creó 10 clústeres con 64 funciones.

fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
   axi.set(xticks=[], yticks=[])
   axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)

Salida

Como resultado, obtendremos la siguiente imagen que muestra los centros de clústeres aprendidos por k-means.

Las siguientes líneas de código coincidirán con las etiquetas de clúster aprendidas con las etiquetas verdaderas que se encuentran en ellas:

from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
   mask = (clusters == i)
   labels[mask] = mode(digits.target[mask])[0]

A continuación, podemos verificar la precisión de la siguiente manera:

from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)

Salida

0.7935447968836951

El resultado anterior muestra que la precisión es de alrededor del 80%.

Ventajas y desventajas

Ventajas

Las siguientes son algunas de las ventajas de los algoritmos de agrupación de K-Means:

  • Es muy fácil de entender e implementar.

  • Si tenemos un gran número de variables, K-means sería más rápido que el agrupamiento jerárquico.

  • Al volver a calcular los centroides, una instancia puede cambiar el clúster.

  • Los clústeres más ajustados se forman con K-medias en comparación con los clústeres jerárquicos.

Desventajas

Las siguientes son algunas desventajas de los algoritmos de agrupación de K-Means:

  • Es un poco difícil predecir el número de agrupaciones, es decir, el valor de k.

  • La producción se ve fuertemente afectada por las entradas iniciales, como el número de grupos (valor de k).

  • El orden de los datos tendrá un fuerte impacto en el resultado final.

  • Es muy sensible al cambio de escala. Si cambiamos la escala de nuestros datos mediante normalización o estandarización, la salida cambiará por completo.

  • No es bueno hacer un trabajo de agrupamiento si los grupos tienen una forma geométrica complicada.

Aplicaciones del algoritmo de agrupación en clústeres de K-medias

Los principales objetivos del análisis de conglomerados son:

  • Obtener una intuición significativa de los datos con los que estamos trabajando.

  • Agrupar y luego predecir dónde se construirán los diferentes modelos para diferentes subgrupos.

Para cumplir con los objetivos mencionados anteriormente, la agrupación de K-medias está funcionando lo suficientemente bien. Se puede utilizar en las siguientes aplicaciones:

  • Segmentación de mercado

  • Agrupación de documentos

  • Segmentación de imagen

  • Compresión de imagen

  • Segmentación de clientes

  • Analizando la tendencia en datos dinámicos