Как переучивать модели только на новых партиях (без взятия предыдущего набора обучающих данных) в Spark Streaming?
Я пытаюсь написать свою первую модель рекомендаций (Spark 2.0.2), и я хотел бы знать, возможно ли это после первоначального обучения, когда модель проработает всю мою работу, работаю только с дельтой для будущего поезда.
Позвольте мне объяснить на примере:
- Первая партия выполняет первую тренировку со всеми rdd (200000 элементов) при запуске системы.
- В конце поезда модель сохраняется.
- Второе пакетное приложение (потоковая передача) загружает ранее сохраненную модель и прослушивает очередь кинезиса.
- Когда новый элемент прибыл, вторая партия должна выполнить тренировку (в дельта-режиме?!) без загрузки всех 200000 элементов ранее, но только с моделью и новым элементом.
- В конце поезда обновленная модель сохраняется.
Вопрос в том, можно ли каким-то образом выполнить шаг 4?
1 ответ
Насколько я понимаю, это возможно только с помощью алгоритмов машинного обучения, которые предназначены для поддержки потокового обучения, таких как StreamingKMeans или StreamingLogisticRegressionWithSGD.
Цитируя их документацию (см. Активные ссылки выше):
(StreamingLogisticRegressionWithSGD) обучает или прогнозирует модель логистической регрессии для потоковых данных. Обучение использует Stochastic Gradient Descent для обновления модели на основе каждой новой партии входящих данных из DStream (см. LogisticRegressionWithSGD для уравнения модели)
StreamingKMeans предоставляет методы для настройки потокового анализа k-средних, обучения модели потоковой передаче и использования модели для прогнозирования потоковой передачи данных.
Что беспокоит меня об алгоритмах, так это то, что они принадлежат org.apache.spark.mllib.clustering
пакет, который теперь устарел (поскольку он основан на RDD, а не на DataFrame). Я не знаю, есть ли у них свои JIRA, чтобы модернизировать их с помощью DataFrame.