« An Investigation of Practical Approximate Nearest Neighbor Algorithms » T. Liu, A. W. Moore, A. Gray, K.Yang —la gang de CMU (présentation par N. Chapados)
K plus proches voisins (KNN)
Pourquoi cet article? KNN naïf prend O(N) à trouver les plus proches voisins Méthodes de partitionnement de l’espace (kd-trees ou metric trees) promettent une borne inférieure de O(log N) Sujettes à la malédiction de la dimensionalité Cet article: KNN APPROXIMATIF Spill trees + recherche heuristique
Metric Trees Partition récursive de l’espace Points de pivot (dist maximale paire-à-paire) Frontière de décision L
Observation évidente : la balle Pour chaque nœud v, on peut construire une hypersphère qui contient tous les points du nœud Centre = v.center Rayon = v.r Remarque: les balles des enfants d’un nœud ne sont pas nécessairement disjointes
Chercher un voisin dans un Metric Tree Recherche en profondeur (depth-first search; DFS) Pour un nœud N —— explore gauche ou droite selon L —— conserve un candidat NN On élague les nœud qui ne peuvent pas contenir le point de recherche
Élaguage q r ||v.center-q|| NN v v.r Élague si
Recherche « défaitiste » UN SEUL chemin de la racine à la feuille Aucun backtracking Rapide: O(N) Approximatif Ne fonctionne pas très bien pour Metric Trees Si le point-test est près de la frontière d’une balle, il est souvent mal classifié
Spill Trees Améliore la précision de la recherche « défaitiste » Tau=zero <==> Metric tree
Recherche hybride Problème avec spill-trees: Profondeur varie énormément avec taille d’overlap t Introduit un seuil d’équilibre (balance threshold) r Cas typique: r=70% Si un enfant se retrouve avec plus de 70% des points du parent, alors on fixe t=0 et on marque le nœud comme non-overlapping Les nœuds « non-overlapping » sont conservés comme points de banchement dans recherche DFS Nœuds overlapping agissent comme des Cut en Prolog
Résultats (1) Perf. de spill-tree (speedup p/r à LSH) Aerial: N=275 465 , d=60 Corel_hist: N=20 000 , d=64 Corel_uci: N=68 040 , d=64 Disk_trace: N=40 000 , d=1024 Galaxy: N=40 000 , d=4000
Résultats (2)