Эффективная реализация SOM (Самоорганизующаяся карта) на Pyspark - PullRequest
0 голосов
/ 10 февраля 2019

Я борюсь с реализацией производительной версии алгоритма SOM Batch в Spark / Pyspark для огромного набора данных с> 100 функциями.У меня такое ощущение, что я могу либо использовать RDD, где я могу / должен сам определять параллизацию, либо использовать Dataframe, который должен быть более производительным, но я не вижу способа использовать что-то вроде локальной переменной накопления для каждого работника при использованииdataframes.

Идеи:

  • Использование аккумуляторов.Распараллелить вычисления, создав UDF, который принимает наблюдения в качестве входных данных, вычисляет воздействия на сеть и отправляет воздействия на накопитель в драйвере.(Реализовал эту версию уже, но, кажется, довольно медленно (я думаю, обновления аккумулятора занимают много времени))
  • Сохраните результаты в новом столбце Dataframe, а затем суммируйте его вместе в конце.(Придется хранить целую нейронную сеть в каждой строке (например, 20 * 20 * 130), хотя) Осознают ли алгоритмы искровой оптимизации, что не нужно сохранять каждую сеть, а только суммировать их вместе?
  • Создайте пользовательские парализованные алгоритмы, используя RDD, подобные следующим: https://machinelearningnepal.com/2018/01/22/apache-spark-implementation-of-som-batch-algorithm/ (но с более производительными алгоритмами вычисления).Но мне нужно было бы использовать какой-то цикл для циклического перебора каждой строки и обновления сети -> звучит так, что это будет довольно бесполезно.)

Есть какие-нибудь мысли по поводу различных вариантов?Есть ли еще лучший вариант?

Или все идеи не так уж хороши, и я должен просто предварительно выбрать подмножество максимального разнообразия своего набора данных и обучить SOM локально на этом.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...