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