2012-03-28 9 views
21

Sto cercando una libreria Java leggera che supporti Ricerche vicine più vicine per Hashing sensibile locale per dati quasi equamente distribuiti in un dataset ad alta dimensione (nel mio caso 32) con alcune centinaia di migliaia di punti dati.Librerie LSH in Java

È abbastanza buono da ottenere tutte le voci in un bucket per una query. Quali realmente ho bisogno potrebbe quindi essere elaborato in un modo diverso in considerazione di alcuni parametri del filtro che il mio problema include.

Ho già trovato likelike ma spero che ci sia qualcosa di un po 'più piccolo e senza bisogno di altri strumenti (come Apache Hadoop nel caso di un simile).

+0

Hai trovato qualcosa? Stavo cercando lo stesso con distanza euclidea come la mia metrica per kNN. –

+0

Non proprio. Ma penso che dovrò realizzare un'implementazione da solo. La domanda tuttavia è ancora come scegliere le buone funzioni di hash ... – s1lence

+1

Puoi iniziare con la funzione di hash nell'implementazione di matlab su http://ttic.uchicago.edu/~gregory/download.html –

risposta

6

Forse questo:

"TarsosLSH è una libreria Java che implementa hashing Località sensibili (LSH), un pratico algoritmo di ricerca vicino più prossimo per i vettori multidimensionali che opera in tempo sublineare Supporta diverse famiglie LSH (Locality Sensitive Hashing): famiglia di hash euclidea (L2), famiglia di hash di città (L1) e famiglia di hash coseno.La libreria cerca di raggiungere il punto giusto tra l'essere in grado di svolgere compiti reali, e abbastanza compatto da servire da dimostrazione su come funziona LSH. "

codice può essere trovato here

1

Il quadro data mining ELKI viene fornito con un indice LSH. Può essere usato con la maggior parte degli algoritmi inclusi (qualsiasi cosa usi la ricerca range o nn) e talvolta funziona molto bene.

In altri casi, LSH non sembra un buon approccio. Può essere abbastanza complicato ottenere i parametri LSH corretti: se si scelgono alcuni parametri troppo alti, il tempo di esecuzione aumenta molto (fino a una scansione lineare). Se li scegliete troppo bassi, l'indice diventa troppo approssimativo e perde per molti vicini.

E 'probabilmente la più grande sfida con LSH: trovare buoni parametri, che producono l'aumento di velocità desiderata e ottenere una buona precisione abbastanza fuori l'indice ...