Повышение скорости реализации t-sne в python для больших данных

18

Я хотел бы уменьшить размерность почти на 1 миллион векторов с 200 измерениями ( doc2vec). Я использую TSNEреализацию из sklearn.manifoldмодуля, и главная проблема - временная сложность. Даже при том method = barnes_hut, что скорость вычислений все еще низка. Некоторое время даже не хватает памяти.

Я использую его на 48-ядерном процессоре с оперативной памятью 130G. Есть ли способ запустить его параллельно или использовать обильный ресурс для ускорения процесса.

yazhi
источник
Вы пытались уменьшить карту в такой среде, как Spark?
Dawny33
Нет .. как это работает, и не могли бы вы, пожалуйста, направить меня ..
Яжи
Pl пройти через документации Спарк в для понимания его :)
Dawny33
1
Посмотрите, работает ли эта реализация Spark.
Эмре
1
Это Скала для Искры. Если вы хотите реализацию Python, вы можете перевести ее; Spark работает и на питоне.
Эмре

Ответы:

7

Проверьте t-SNE на основе интерполяции с ускорением FFT ( бумага , код и пакет Python ).

Из аннотации:

Мы представляем t-SNE на основе быстрой интерполяции с ускоренным преобразованием Фурье (FIt-SNE), что значительно ускоряет вычисление t-SNE. Наиболее трудоемким шагом t-SNE является свертка, которую мы ускоряем путем интерполяции на равномерно распределенную сетку и последующего использования быстрого преобразования Фурье для выполнения свертки. Мы также оптимизируем вычисление входных сходств в больших измерениях, используя многопоточные приближенные ближайшие соседи.

В статье также приведен пример набора данных с миллионами точек и 100 измерениями (аналогично настройке OP), и, похоже, это займет ~ 1 час.

The_Anomaly
источник
5

Поскольку в SO нет ответов, я задал себе вопрос на странице github, и проблема была закрыта, указав следующий ответ GaelVaroquaux.

Если вы хотите только распараллелить векторную операцию, вам следует использовать сборку numpy, скомпилированную с помощью MKL (не пытайтесь делать это самостоятельно, это сложно).

В самом алгоритме могут быть подходы к высокоуровневому параллелизму, что, вероятно, приведет к большему выигрышу. Однако, после быстрого просмотра кода, я не увидел никакого четкого способа сделать это.

Я собираюсь продолжить и закрыть этот вопрос, так как это больше список желаний голубого неба. Я полностью согласен, я бы хотел, чтобы TSNE работал быстрее, и было бы здорово, если бы параллелизм был легким. Но в нынешнем положении дел требуется больше работы, чтобы быть в состоянии, когда мы можем заняться таким списком пожеланий.

yazhi
источник