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 ++.
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.)