Ho un albero decisionale binario. Prende input come una serie di float e ogni nodo branch si divide su un indice di input e il valore alla fine mi porta su una foglia.Posso usare una struttura dati più veloce di un albero per questo?
Sto eseguendo un numero elevato di ricerche su questo albero (circa il 17% del tempo di esecuzione in base all'analisi delle prestazioni (Modifica: avendo ottimizzato altre aree è ora quasi al 40%), e mi chiedo se potrei/dovrebbe utilizzare una diversa struttura dei dati per migliorare la velocità di ricerca.
Non è possibile utilizzare una sorta di tabella hash, poiché gli input non si collegano direttamente a un nodo foglia, ma mi chiedevo se qualcuno avesse suggerito in merito ai metodi e alle strutture dati che potrei usare al posto dell'albero (o oltre?) per migliorare la velocità di ricerca.
La memoria è una preoccupazione, ma meno preoccupante della velocità.
Il codice è attualmente scritto in C#, ma ovviamente è possibile applicare qualsiasi metodo.
Modifica: C'è un po 'troppo codice per postare, ma darò maggiori dettagli sull'albero.
L'albero viene generato utilizzando calcoli del guadagno di informazioni, non è sempre uno split 50/50, il valore split può essere qualsiasi valore float. Un singolo input può anche essere suddiviso più volte aumentando la risoluzione su quell'input.
ho postato una domanda sul rendimento del iteratore qui:
Micro optimisations iterating through a tree in C#
Ma penso di aver bisogno di guardare la struttura dati stessi per migliorare ulteriormente le prestazioni.
Sto mirando al maggior numero di prestazioni possibile qui. Sto lavorando a un nuovo metodo di machine learning e l'albero si sviluppa usando un ciclo di feedback. Per il processo su cui sto lavorando, ritengo che verrà eseguito per diversi mesi, quindi un risparmio di qualche% qua e là è enorme. L'obiettivo finale è la velocità senza utilizzare troppa memoria.
dizionario con ordinamento che può essere una mappa –
Si dice che si dispone di un albero binario e l'input su ciascun nodo è un float - è la scelta del nodo figlio basato su 'input <0.5' o c'è qualcosa di più complesso in corso ? Puoi pubblicare del codice? Inoltre: il 17% dei tempi di esecuzione non è molto contestuale - potrebbe essere molto veloce! Hai un obiettivo che stai mirando o più dettagli sulla profilazione che puoi condividere? –
Grazie Dan, ho aggiunto alcuni dettagli sull'albero e sui bersagli. –