Tengo una nube de puntos 3D con varios millones de puntos y necesito dividirla en aproximadamente 50k clusters. Como los clusters tienen que ser esféricos, lo que suele ser un inconveniente de k-means, este último parece bastante apropiado. Mi problema es que $k$ es demasiado grande, por lo que el tiempo de ejecución es inaceptable. Las agrupaciones no tienen que ser exactas, puedo tolerar bastante bien las clasificaciones erróneas.
Encontré un documento sobre mini-lote k-means que podría funcionar. Y este trabajo utilizando MapReduce . También leí este y otras preguntas, pero la pregunta y las respuestas son demasiado vagas. Este (diapositiva 2) la fuente afirma que con el uso de árboles k-d el tiempo de ejecución se puede reducir de $O(l*K*m*n)$ a $O(m*logm)$ No puedo encontrar cómo debería funcionar.
¿Es el mini-batch k-means el camino a seguir? ¿Hay alguna solución sencilla para los datos de baja dimensión (3D)?
Agradecería una implementación en C++, hasta ahora sólo he podido encontrar mini batch k-means en scikit que podría traducir. ¿Puede recomendar algún otro?