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 kk 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)O(l∗K∗m∗n) a O(m∗logm)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?