Algoritmos de agrupamiento: algoritmo de cambio medio
Introducción al algoritmo de desplazamiento medio
Como se discutió anteriormente, es otro poderoso algoritmo de agrupamiento utilizado en el aprendizaje no supervisado. A diferencia de la agrupación en clústeres de K-medias, no hace ninguna suposición; por tanto, es un algoritmo no paramétrico.
El algoritmo de cambio medio básicamente asigna los puntos de datos a los grupos de forma iterativa cambiando los puntos hacia la mayor densidad de puntos de datos, es decir, el centroide del grupo.
La diferencia entre el algoritmo K-Means y Mean-Shift es que más adelante no es necesario especificar el número de grupos de antemano porque el número de grupos será determinado por el algoritmo de datos.
Trabajo del algoritmo de cambio medio
Podemos comprender el funcionamiento del algoritmo de agrupación en clústeres Mean-Shift con la ayuda de los siguientes pasos:
Step 1 - Primero, comience con los puntos de datos asignados a un grupo propio.
Step 2 - A continuación, este algoritmo calculará los centroides.
Step 3 - En este paso, se actualizará la ubicación de los nuevos centroides.
Step 4 - Ahora, el proceso se repetirá y se moverá a la región de mayor densidad.
Step 5 - Por fin, se detendrá una vez que los centroides alcancen la posición desde donde no se puede mover más.
Implementación en Python
Es un ejemplo simple para comprender cómo funciona el algoritmo Mean-Shift. En este ejemplo, primero generaremos un conjunto de datos 2D que contenga 4 blobs diferentes y luego aplicaremos el algoritmo Mean-Shift para ver el resultado.
%matplotlib inline
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[3,3,3],[4,5,5],[3,10,10]]
X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
plt.scatter(X[:,0],X[:,1])
plt.show()
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
marker=".",color='k', s=20, linewidths = 5, zorder=10)
plt.show()
Salida
[[ 2.98462798 9.9733794 10.02629344]
[ 3.94758484 4.99122771 4.99349433]
[ 3.00788996 3.03851268 2.99183033]]
Estimated clusters: 3
Ventajas y desventajas
Ventajas
Las siguientes son algunas de las ventajas del algoritmo de agrupación en clústeres Mean-Shift:
No es necesario hacer ninguna suposición de modelo como en K-medias o mezcla gaussiana.
También puede modelar los grupos complejos que tienen forma no convexa.
Solo necesita un parámetro llamado ancho de banda que determina automáticamente el número de clústeres.
No hay ningún problema de mínimos locales como en K-means.
Ningún problema generado por valores atípicos.
Desventajas
Las siguientes son algunas desventajas del algoritmo de agrupación en clústeres Mean-Shift:
El algoritmo de cambio medio no funciona bien en el caso de una dimensión alta, donde el número de agrupaciones cambia abruptamente.
No tenemos ningún control directo sobre el número de clústeres, pero en algunas aplicaciones, necesitamos un número específico de clústeres.
No puede diferenciar entre modos significativos y sin sentido.