Para una aplicación de aprendizaje de máquina, mis necesidades de grupo para calcular la distancia euclídea a la ésimo vecino más cercano en un conjunto para cada (para entre 5 y aproximadamente 100 , y algunos cientos hasta unos pocos millones). Actualmente estamos utilizando el enfoque de fuerza bruta o el obvio con un árbol kd en , que cuando es alto yes relativamente bajo, nunca gana. (Todo está en la memoria).
Sin embargo, parece que debe haber una mejor manera que la fuerza bruta, al menos una que aproveche la desigualdad del triángulo, o tal vez con hashes sensibles a la localidad. Una aproximación razonablemente ajustada también está potencialmente bien.
La investigación que he podido encontrar parece centrarse en el problema de encontrar el vecino más cercano (o uno que sea aproximadamente el más cercano). ¿El problema que busco tiene otro nombre o hay una conexión con un problema relacionado en el que no he pensado?
Respuestas:
Aquí hay un truco simple que podría ser útil. Considere una muestra aleatoria que selecciona cada punto con probabilidad 1 / k. Es fácil verificar que con buena probabilidad exactamente uno de sus k vecinos más cercanos estaría en la muestra. Calcule el vecino más cercano en la muestra. Repita esto O (k log n) veces. Con alta probabilidad los k puntos más cercanos en elO ( k logn ) los puntos calculados son los k vecinos más cercanos a su consulta. Por lo tanto, encontrar el k vecino más cercano es equivalente a hacerO ( k logn ) consultas vecinas más cercanas.
En resumen, dame una estructura de datos rápida para responder a las consultas de vecinos más cercanos, y me complacería darte una estructura de datos rápida de k-vecino más cercano.
fuente
Una solución aproximada barata que utiliza un "hash sensible a la localidad" sería convertir cada punto en su forma intercalada:
[xxx, aaa, zzz] -> xyzxyzxyz
luego la clasificación de radix para el preprocesamiento.
Elija su punto de consulta y listok apunta en ambas direcciones para obtener un tamaño 2 k conjunto; entonces toma elk t h más cercano a tu punto. También vea este artículo de Connor y Kumar.
También vea este artículo de Callahan y Kosaraju.
fuente