Migliora la velocità dell'implementazione di t-sne in Python per dati enormi


18

Vorrei ridurre la dimensionalità su quasi 1 milione di vettori ciascuno con 200 dimensioni ( doc2vec). Sto usando l' TSNEimplementazione dal sklearn.manifoldmodulo per questo e il problema principale è la complessità temporale. Anche con method = barnes_hut, la velocità di calcolo è ancora bassa. Qualche volta anche la memoria si esaurisce.

Lo sto eseguendo su un processore 48 core con 130G RAM. Esiste un metodo per eseguirlo in parallelo o utilizzare la risorsa abbondante per accelerare il processo.


Hai provato a ridurre le mappe in un framework come Spark?
Dawny33

No .. come funziona e puoi per favore
dirigermi

Pl passare attraverso la documentazione di Spark per la comprensione di esso :)
Dawny33

1
Verifica se questa implementazione Spark funziona.
Emre,

1
È Scala per Spark. Se vuoi un'implementazione di Python potresti essere in grado di tradurla; Spark funziona anche su Python.
Emre,

Risposte:



7

Dai un'occhiata al t-SNE basato su interpolazione con accelerazione FFT ( pacchetto di carta , codice e Python ).

Dall'abstract:

Presentiamo t-SNE (FIt-SNE) basato su interpolazione accelerata dalla trasformata di Fourier veloce, che accelera notevolmente il calcolo di t-SNE. Il passaggio più dispendioso in termini di tempo di t-SNE è una convoluzione che acceleriamo interpolando su una griglia equispaziata e successivamente utilizzando la trasformata di Fourier veloce per eseguire la convoluzione. Ottimizziamo anche il calcolo delle somiglianze di input in dimensioni elevate utilizzando i vicini più vicini approssimativi multi-thread.

Il documento include anche un esempio di un set di dati con un milione di punti e 100 dimensioni (simile all'impostazione di OP) e sembra richiedere circa 1 ora.


5

Da allora, non ci sono risposte in SO, mi sono chiesto nella pagina di github e il problema è stato chiuso affermando la seguente risposta di GaelVaroquaux ..

Se vuoi solo parallelizzare l'operazione vettoriale, allora dovresti usare una build di numpy compilata con MKL (non tentare di farlo da solo, è una sfida).

Potrebbero esserci approcci al parallelismo di alto livello nell'algoritmo stesso, che probabilmente porterebbe a maggiori guadagni. Tuttavia, dopo una rapida occhiata al codice, non ho visto alcun modo chiaro per farlo.

Ho intenzione di andare avanti e chiudere questo problema, in quanto si tratta più di una lista dei desideri del cielo blu. Sono completamente d'accordo, vorrei che TSNE andasse più veloce, e sarebbe bello se il parallelismo fosse facile. Ma nello stato attuale delle cose, è necessario più lavoro per essere in uno stato in cui possiamo affrontare tale lista dei desideri.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.