Popraw szybkość implementacji t-sne w pythonie dla dużych danych

18

Chciałbym zmniejszyć wymiarowość na prawie 1 milionach wektorów, każdy o 200 wymiarach ( doc2vec). Używam do tego TSNEimplementacji z sklearn.manifoldmodułu, a głównym problemem jest złożoność czasu. Mimo method = barnes_hutto szybkość obliczeń jest wciąż niska. Czasami nawet kończy się pamięć.

Używam go na 48-rdzeniowym procesorze z 130G RAM. Czy istnieje metoda równoległego uruchomienia lub wykorzystania dużej ilości zasobów w celu przyspieszenia procesu?

yazhi
źródło
Czy próbowałeś redukować mapy w środowisku takim jak Spark?
Dawny33
Nie ... jak to działa i czy możesz proszę kierować mną ...
yazhi
Pl
zajrzyj
1
Sprawdź, czy ta implementacja Spark działa.
Emre
1
To Scala dla Spark. Jeśli chcesz implementacji w Pythonie, możesz być w stanie ją przetłumaczyć; Spark działa również na Pythonie.
Emre

Odpowiedzi:

7

Sprawdź akcelerowaną przez FFT interpolację opartą na interpolacji t-SNE ( papier , kod i pakiet Python ).

Z streszczenia:

Prezentujemy t-SNE opartą na szybkiej transformacji Fouriera z interpolacją (FIt-SNE), która znacznie przyspiesza obliczenia t-SNE. Najbardziej czasochłonnym krokiem t-SNE jest splot, który przyspieszamy przez interpolację na równej siatce, a następnie za pomocą szybkiej transformaty Fouriera do wykonania splotu. Optymalizujemy również obliczanie podobieństw wejściowych w wysokich wymiarach, używając wielowątkowych przybliżonych najbliższych sąsiadów.

Artykuł zawiera również przykład zestawu danych z milionem punktów i 100 wymiarami (podobnymi do ustawienia OP) i wydaje się, że zajmuje to około 1 godziny.

The_Anomaly
źródło
5

Ponieważ w SO nie ma odpowiedzi, zadałem sobie pytanie na stronie github, a problem został zamknięty, podając następującą odpowiedź GaelVaroquaux ..

Jeśli chcesz tylko zrównoleglić operacje wektorowe, powinieneś użyć kompilacji numpy skompilowanej z MKL (nie próbuj robić tego sam, to trudne).

W samym algorytmie mogą istnieć podejścia do równoległości wysokiego poziomu, co prawdopodobnie doprowadziłoby do większych korzyści. Jednak po krótkim spojrzeniu na kod nie znalazłem wyraźnego sposobu na zrobienie tego.

Przejdę do przodu i zamknę ten problem, ponieważ jest to raczej lista życzeń niebieskiego nieba. Całkowicie się zgadzam, chciałbym, aby TSNE jechał szybciej i byłoby świetnie, gdyby równoległość była łatwa. Ale w obecnym stanie rzeczy potrzeba więcej pracy, aby móc sprostać takiej liście życzeń.

yazhi
źródło