Vantage point tree

Un arbre à points de vue (ou vp-tree, abréviation de l'appellation anglaise vantage point tree) est un arbre métrique permettant de partitionner n'importe quel espace de données pourvu d'une métrique. Le processus de construction de l'arbre consiste à sélectionner un point (ledit "point de vue" ou "point d'observation / de référence", vantage point en anglais), puis à diviser l'espace en deux sous-espaces : un sous-espace gauche (ou intérieur) contenant l'ensemble des points à une distance du point pivot inférieure à un certain seuil, et un sous-espace droit (ou extérieur) contenant l'ensemble des points ne remplissant pas cette condition. Le processus est appliqué de manière récursive, produisant des sous-espaces de plus en plus petits. Le vp-tree résultant est une structure de données arborescente telle qu'une proximité dans l'arbre est représentative d'une proximité dans l'espace ainsi partitionné.

Ce processus de partitionnement itératif est similaire à celui d'un k-d tree, mais utilise des partitions circulaires (ou sphériques, hypersphériques, etc.) plutôt que rectilignes. Dans un espace euclidien bidimensionnel, il produit un découpage en régions dont la forme est semblable à des coquilles sphériques (voir Figure 1. et Figure 2. dans (Yianilos, 1993)[1]).

Histoire[modifier | modifier le code]

La première mention de cette méthode remonte à 1991 : elle est présentée sous le nom d'arbre métrique dans un article publié par Jeffrey Uhlmann[2]. Toutefois, on doit l'appellation vantage point tree à Peter Yianilos, qui affirme dans un papier datant de 1993 avoir formalisé cette méthode indépendamment des recherches de J. K. Uhlmann. Dans cette publication, il introduit trois versions du vp-tree (vp-tree, vps-tree, vpsb-tree)[1].

En 1999, T. Bozkaya et M. Ozsoyoglu proposent les arbres à points de vue multiples (ou mvp-tree, abréviation de l'appellation anglaise multivantage point tree). Les mvp-trees sont une généralisation des vp-trees. Cette approche a été développée afin d'améliorer les propriétés des vp-trees lors de requêtes de recherche de similarité sur de grands espaces métriques. La différence majeure est l'utilisation de plus d'un point de référence pour partitionner l'espace à chaque niveau[3],[4].

En 2009, Nielsen et al créent les bvp-trees (ou Bregman ventage point trees) et étendent ainsi les vp-trees à des espaces non métriques en utilisant les divergences de Bregman[5].

Construction[modifier | modifier le code]

La construction la plus simple d'un vp-tree consiste à partitionner l'espace à l'aide de coupes sphériques de la façon suivante :

À chaque nouveau nœud, sélectionner un point pivot v ("vantage point") parmi les points du nœud ;

Calculer les distances de tous les autres points (c.-à-d. les points qui seront indexés sous ce nœud) au point pivot ;

Calculer la distance médiane et l'utiliser comme distance seuil, de façon que la moitié des points se trouve à l'intérieur de la boule de centre v et de rayon , et l'autre moitié à l'extérieur ;

Associer les points qui se trouvent à l'intérieur de la boule au sous-arbre de gauche, et ceux se trouvant à l'extérieur au sous-arbre de droite ;

Construire de manière récursive les branches de niveau inférieur.

Le vp-tree est une structure de données intéressante car elle ne nécessite aucune connaissance des points autre que le résultat de l'évaluation de la fonction de distance qui satisfait les propriétés de l'espace métrique[6]. Cette méthode d'indexation basée uniquement sur la distance peut donc aussi être utilisée dans des espaces métriques non standards (et notamment : non euclidens). Elle ne fait aucune hypothèse sur la géométrie de l'espace de données.

Recherche du plus proche voisin[modifier | modifier le code]

Un vp-tree peut être utilisé pour trouver le plus proche voisin d'un point . Cette recherche peut être couplée à une condition de distance maximale qu'un point voisin doit respecter pour être considéré comme "suffisamment proche".

L'algorithme de recherche est récursif. Une implémentation possible est la suivante[2],[3] :

À chaque nœud, de point pivot v ("vantage point") et de distance seuil t ("threshold"), calculer la distance de à v ;

Si , stocker les nouvelles valeurs : ,  ;

Si , alors tous les points du sous-arbre de gauche sont à une distance inférieure ou égale à de . Chercher de manière récursive dans le sous-arbre de gauche (intérieur de la boule) ;

Si , chercher de manière récursive dans le sous-arbre de gauche (intérieur de la boule) ;

Si , chercher de manière récursive dans le sous-arbre de droite (extérieur de la boule).

Le pire des cas arrive lorsque , c'est-à-dire lorsque l'ensemble des points candidats (i.e qui pourraient satisfaire la requête) intersecte à la fois la boule associée au sous-arbre gauche et la boule associée au sous-arbre droit. Dans ce cas, il faut chercher de manière récursive dans les deux sous-arbres : aucun élagage de l'arbre n'est possible.

Complexité[modifier | modifier le code]

La méthode de construction la plus simple a une complexité de O(n log n). Pour chaque élément, log n niveaux sont parcourus pour trouver son emplacement[1].

La temps d'exécution d'une recherche d'un unique plus proche voisin est d'environ O(log n)[1].

Le temps nécessaire au parcours d'un vp-tree pour un ensemble de données, peut varier considérablement en fonction des spécificités de l'algorithme utilisé et du choix des paramètres. L'article de S. Brin[4] détaille les performances de plusieurs variantes algorithmiques du vp-tree, pour plusieurs valeurs de paramètres, afin d'étudier le coût de chacune d'entre elles. Le coût est mesuré en nombre de calculs de distance.

Le coût en termes d'espace de stockage pour un vp-tree est linéaire (environ n). Chaque point de données est stocké et chaque élément de chaque nœud interne (c.-à-d. non feuille) nécessite un pointeur vers ses nœuds descendants. (Voir S. Brin[4] pour plus de détails sur le choix de l'implémentation. Le paramètre codant pour le nombre d'éléments à chaque nœud joue un rôle important. )

Notez que certains outils d'espace métrique nécessitent le calcul d'une matrice de distances par paires, de coût O(n2). Ce n'est pas nécessaire avec les vp-trees.

Références[modifier | modifier le code]

  1. a b c et d Yianilos « Data structures and algorithms for nearest neighbor search in general metric spaces » () (lire en ligne)
    Fourth annual ACM-SIAM symposium on Discrete algorithms
  2. a et b Uhlmann, « Satisfying General Proximity/Similarity Queries with Metric Trees », Information Processing Letters, vol. 40,‎ , p. 175–179 (DOI 10.1016/0020-0190(91)90074-r)
  3. a et b Bozkaya et Ozsoyoglu, « Indexing Large Metric Spaces for Similarity Search Queries », ACM Trans. Database Syst., vol. 24, no 3,‎ , p. 361–404 (ISSN 0362-5915, DOI 10.1145/328939.328959, S2CID 6486308)
  4. a b et c Brin, « Near Neighbor Search in Large Metric Spaces », VLDB '95 Proceedings of the 21th International Conference on Very Large Data Bases, Zurich, Switzerland, Morgan Kaufmann Publishers Inc.,‎ , p. 574–584 (ISBN 9781558603790, lire en ligne)
  5. Frank Nielsen « Bregman vantage point trees for efficient nearest Neighbor Queries » ()
    « (ibid.) », dans Proceedings of Multimedia and Exp (ICME), IEEE, p. 878–881
  6. Ada Wai-chee Fu, Polly Mei-shuen Chan, Yin-Ling Cheung et Yiu Sang Moon « Dynamic vp-tree indexing for n-nearest neighbor search given pair-wise distances » () (lire en ligne, consulté le )
    « (ibid.) », dans The VLDB Journal — The International Journal on Very Large Data Bases, Springer-Verlag New York, Inc. Secaucus, NJ, USA, p. 154–173

Liens externes[modifier | modifier le code]