Ball tree

In informatica, un ball tree (letteralmente albero a sfere) è una struttura dati spaziale ad albero utilizzata per organizzare punti in uno spazio metrico multidimensionale. Trova la sua principale applicazione nell'ottimizzazione di query geometriche, in particolare nella ricerca dei vicini più prossimi (Nearest Neighbor Search) e nel clustering di dati in spazi a elevata dimensionalità (), dove altre strutture come i k-d tree soffrono della cosiddetta maledizione della dimensionalità.

A differenza dei k-d tree, che dividono lo spazio orientando iperpiani lungo gli assi cartesiani, i ball tree partizionano i dati racchiudendoli in ipersfere (o ball) che possono intersecarsi liberamente, ma il cui volume complessivo viene minimizzato per ottimizzare i tempi di potatura durante la ricerca.

Struttura geometrica e proprietà

Un ball tree è un albero binario in cui ogni nodo definisce una regione ipersferica nello spazio metrico considerato.

Ogni nodo interno dell'albero è caratterizzato da una coppia , dove:

Proprietà di Inclusione

La proprietà fondamentale di un ball tree è il vincolo di contenimento geometrico: Se un nodo ha come figli i nodi (sinistro) e (destro), allora tutti i punti geometrici contenuti nelle ipersfere di e devono essere rigorosamente contenuti nell'ipersfera di :

e

Tuttavia, le sfere figlie e non sono necessariamente disgiunte e possono parzialmente sovrapporsi. I punti fisici del dataset sono memorizzati esclusivamente nelle foglie dell'albero.

Algoritmo di costruzione (top-down)

La costruzione efficiente di un ball tree si basa sulla decomposizione ricorsiva del dataset. L'obiettivo principale è scegliere i centri delle ipersfere in modo da minimizzare il loro raggio (e quindi il volume dello spazio racchiuso), riducendo le sovrapposizioni.

Il metodo euristico standard più utilizzato segue questi passaggi:

Algoritmo di ricerca dei vicini più prossimi

La ricerca del vicino più prossimo con un ball tree sfrutta la disuguaglianza triangolare per implementare una potente strategia branch and bound, che permette di scartare interi rami dell'albero senza doverne esaminare i punti interni.

Dato un punto di query e una distanza di soglia mobile (che rappresenta la distanza attuale dal -esimo vicino più prossimo trovato fino a quel momento):

  1. Calcolo della distanza dal centro (fase iniziale sul nodo ): si calcola la distanza tra il punto di query q e il centro c del nodo corrente: .
  2. Test di potatura (verifica geometrica): se , significa che persino il punto più vicino possibile all'interno della sfera di è più lontano del miglior vicino già trovato. Il nodo e tutto il suo sottoalbero vengono scartati immediatamente.
  3. Scorrimento condizionato (visita delle foglie): se il nodo è una foglia, si calcola la distanza esatta tra e tutti i punti fisici contenuti nella foglia, aggiornando la lista dei vicini più prossimi e abbassando il valore di .
  4. Esplorazione prioritaria (scelta del ramo ricorsivo): se il nodo è interno, si determina quale dei due figli abbia il centro più vicino a . Si visita prima quel figlio (per massimizzare la probabilità di abbassare rapidamente ) e successivamente si valuta l'altro figlio applicando nuovamente il test di potatura.

Confronto con il k-d tree

Mentre i k-d tree dividono lo spazio con iperpiani ortogonali agli assi, creando regioni cubiche o rettangolari, i ball tree usano regioni sferiche. Questo comporta differenze strutturali cruciali:

Caratteristica K-d Tree Ball Tree
Geometria dei nodi Iperrettangoli asse-allineati Ipersfere
Partizione dello spazio Disgiunta

(nessuna sovrapposizione)

Non disgiunta

(possibile sovrapposizione)

Prestazioni ad alte

dimensioni (d ≥ 20)

Decade rapidamente

(maledizione della dimensionalità)

Più robusto,

volumi di potatura più compatti

Costo computazionale

di partizionamento

Basso

(mediana su un singolo asse)

Moderato

(calcolo distanze geometriche)

Al crescere della dimensionalità, gli "angoli" degli iper-rettangoli dei k-d tree tendono a svuotarsi a causa delle proprietà degli spazi iperdimensionali, costringendo l'algoritmo di ricerca a verificare quasi tutti i rami. Le iper-linee curve delle sfere riducono questo volume inutilizzato, rendendo i ball tree decisamente più efficienti in contesti di apprendimento automatico con molte feature (ad es. embedding di immagini o testi).

Note

  1. ↑ (EN) Jeffrey K. Uhlmann, Satisfying general proximity / similarity queries with metric trees, in Information Processing Letters, vol. 40, n. 4, 1991-11, pp. 175–179, DOI:10.1016/0020-0190(91)90074-R.
  2. ↑ Omohundro, S. M., Five balltree construction algorithms (PDF), International Computer Science Institute Technical Report, TR-89-063, 1989.
  3. ↑ (EN) K. Fukunage e P. M. Narendra, A Branch and Bound Algorithm for Computing k-Nearest Neighbors, in IEEE Trans. Comput., vol. 24, n. 7, 1º luglio 1975, pp. 750–753, DOI:10.1109/T-C.1975.224297.
  4. ↑ (EN) Ting Liu, Andrew W. Moore e Alexander Gray, New Algorithms for Efficient High-Dimensional Nonparametric Classification, in Journal of Machine Learning Research, vol. 7, n. 41, 2006, pp. 1135–1158.
  5. ↑ (EN) Liu, T., Moore, A. W., Gray, A. e Yang, K., An investigation of practical approximate nearest neighbor algorithms (PDF), in Advances in Neural Information Processing Systems (NIPS 2004), vol. 17, 2005, pp. 825-832.

Collegamenti esterni