k-means vs k-means ++


10

Hasta donde yo sé, k-means selecciona los centros iniciales al azar. Como se basan en pura suerte, pueden seleccionarse realmente mal. El algoritmo K-means ++ intenta resolver este problema, extendiendo los centros iniciales de manera uniforme.

  • ¿Los dos algoritmos garantizan los mismos resultados? O es posible que los centroides iniciales mal elegidos conduzcan a un mal resultado, sin importar cuántas iteraciones.

  • Digamos que hay un conjunto de datos dado y un número dado de grupos deseados. Ejecutamos un algoritmo k-means siempre que converja (no más movimiento central). ¿Existe una solución exacta para este problema de clúster (dado SSE), o k-means producirá resultados a veces diferentes en la repetición?

  • Si hay más de una solución a un problema de agrupación (conjunto de datos dado, número de agrupaciones dado), ¿K-means ++ garantiza un mejor resultado, o simplemente un proceso más rápido? Por mejor quiero decir SSE más bajo.

La razón por la que hago estas preguntas es porque estoy buscando un algoritmo k-means para agrupar un gran conjunto de datos. He encontrado algunos k-means ++, pero también hay algunas implementaciones de CUDA. Como ya sabe, CUDA está utilizando la GPU, y puede ejecutar más de cientos de hilos en paralelo. (Por lo tanto, realmente puede acelerar todo el proceso). Pero ninguna de las implementaciones de CUDA, que he encontrado hasta ahora, tiene inicialización k-means ++.


55
k-means picks the initial centers randomly. Elegir centros iniciales no es parte del algoritmo k-means en sí. Los centros se pueden elegir cualquiera. Una buena implementación de k-means ofrecerá varias opciones para definir los centros iniciales (aleatorio, definido por el usuario, k-puntos máximos, etc.)
ttnphns

Respuestas:


9

K-means comienza con la asignación aleatoria de centros de clúster y luego busca "mejores" soluciones. K-means ++ comienza con la asignación aleatoria de un centro de clúster y luego busca otros centros dados el primero. Por lo tanto, ambos algoritmos usan la inicialización aleatoria como punto de partida, por lo que pueden dar diferentes resultados en diferentes ejecuciones. Como ejemplo, puede consultar esta conferencia: Agrupación como problema de inferencia de ejemplo , alrededor de 40 minutos hay ejemplos de corridas de k-means, pero toda la conferencia es interesante.

Entonces, respondiendo a sus preguntas:

  • No, debido a que hay una inicialización aleatoria, diferentes ejecuciones pueden dar diferentes resultados (ver ejemplos en la conferencia). Ellos deben dar resultados comparables, pero esto no está garantizado. Además, como todos los centros se inicializan aleatoriamente en k-means, puede dar resultados diferentes que k-means ++.
  • K-means puede dar diferentes resultados en diferentes ejecuciones.
  • El documento k-means ++ proporciona resultados de simulación monte-carlo que muestran que k-means ++ es más rápido y proporciona un mejor rendimiento, por lo que no hay garantía, pero puede ser mejor.

En cuanto a su problema: lo que significa k-++ ++ elige los centros y luego comienza un k-means "clásico". Entonces, lo que puede hacer es (1) usar la parte del algoritmo que elige los centros y luego (2) usar esos centros en las implementaciones de GPU de k-means. De esta manera, al menos una parte de un problema se resuelve en un software basado en GPU, por lo que debería ser más rápido.


4

Visualización de los centroides iniciales de K-means y K-means ++

Para agregar una vista intuitiva de la diferencia entre los centroides iniciales de los dos algoritmos, considere el siguiente conjunto de datos de juguete que consta de tres cuadrados generados uniformemente

ingrese la descripción de la imagen aquí

Aquí hay histogramas 2D que muestran dónde los algoritmos k-means y k-means ++ inicializan sus centroides iniciales (simulaciones 2000).

ingrese la descripción de la imagen aquí

Claramente, el k-means estándar inicializa los puntos de manera uniforme, mientras que k-means ++ tiende a inicializarse cerca del centro de los cuadrados


2

Muchas veces, la inicialización aleatoria de KMeans lleva menos tiempo que KMeans ++, pero da un resultado deficiente. Debido a la inicialización aleatoria muchas veces obtenemos un óptimo local porque nuestro conjunto inicial de centros no se distribuye sobre el conjunto de datos.

Entonces, respondiendo a tu pregunta:

  1. No, debido a que los centros KMeans ++ se distribuyen sobre los datos, es más probable que tenga un costo menor (dentro de la suma de cuadrados del clúster) que la inicialización aleatoria.
  2. Como es una inicialización aleatoria en KMeans, da un resultado diferente dependiendo de su conjunto inicial de centros
  3. En primer lugar, no existe una solución definitiva para KMeans, ya que es un aprendizaje no supervisado, lo que podemos hacer es reducir el costo de KMeans (SSE). KMeans elige el centro inicial de forma inteligente, requiere menos iteración de llyods para converger y ofrece un mejor resultado que Aleatorio
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.