Mejore la velocidad de implementación de t-sne en python para obtener grandes datos

18

Me gustaría hacer una reducción de dimensionalidad en casi 1 millón de vectores cada uno con 200 dimensiones ( doc2vec). Estoy usando la TSNEimplementación del sklearn.manifoldmódulo para él y el principal problema es la complejidad del tiempo. Incluso con method = barnes_hut, la velocidad de cálculo sigue siendo baja. Algún tiempo, incluso se queda sin memoria.

Lo estoy ejecutando en un procesador de 48 núcleos con 130G de RAM. ¿Existe algún método para ejecutarlo en paralelo o hacer uso del abundante recurso para acelerar el proceso?

yazhi
fuente
¿Intentaste la reducción de mapas en un marco como Spark?
Dawny33
Nop .. ¿cómo funciona y puede usted decirme cómo llegar ..
Yazhi
Por favor
revise
1
Vea si esta implementación de Spark funciona.
Emre
1
Es Scala para Spark. Si desea una implementación de Python, puede traducirla; Spark también se ejecuta en python.
Emre

Respuestas:

7

Consulte t-SNE basado en interpolación acelerada por FFT ( papel , código y paquete de Python ).

Del resumen:

Presentamos t-SNE basado en la interpolación acelerada por transformación de Fourier rápida (FIt-SNE), que acelera drásticamente el cálculo de t-SNE. El paso más lento de t-SNE es una convolución que aceleramos interpolando en una cuadrícula equiespaciada y, posteriormente, utilizando la transformada rápida de Fourier para realizar la convolución. También optimizamos el cálculo de las similitudes de entrada en altas dimensiones utilizando vecinos más cercanos aproximados de subprocesos múltiples.

El documento también incluye un ejemplo de un conjunto de datos con un millón de puntos y 100 dimensiones (similar a la configuración de OP), y parece tomar ~ 1 hora.

La_Anomalía
fuente
5

Desde entonces, no hay respuestas en SO, me he preguntado en la página de Github y el problema se ha cerrado al indicar la siguiente respuesta de GaelVaroquaux.

Si solo desea paralelizar la operación de vectores, entonces debe usar una compilación de numpy compilada con MKL (no intente hacerlo usted mismo, es un desafío).

Podría haber enfoques para el paralelismo de alto nivel en el algoritmo mismo, lo que probablemente conduciría a mayores ganancias. Sin embargo, después de un rápido vistazo al código, no vi ninguna forma clara de hacerlo.

Voy a seguir adelante y cerrar este problema, ya que es más una lista de deseos de cielo azul. Estoy completamente de acuerdo, me gustaría que TSNE fuera más rápido, y sería genial que el paralelismo fuera fácil. Pero en el estado actual de las cosas, se requiere más trabajo para estar en un estado en el que podamos abordar dicha lista de deseos.

yazhi
fuente