Простой трюк, чтобы сделать ваши K-средние масштабируемыми.

Хорошо известное K-Means часто используется для решения проблем неконтролируемой кластеризации. Преимущество этой модели в том, что ее легко реализовать и объяснить, что облегчает общение с бизнесом. В Python он, очевидно, включен в библиотеку Scikit-learn, которая часто выбирается для разработки K-средних. Но у этого решения есть существенный недостаток: оно не масштабируется.

Переломный момент в Scikit-learn ближе, чем вы думаете

Действительно, поскольку задания Scikit-learn не распределены, вы можете легко достичь его предела. В моем случае у нас был вариант использования сегментации, когда мы создали и развернули модель sklearn в рабочей среде. Проблема в том, что количество созданных клиентов резко увеличилось до такой отметки (10+ миллионов), что у нас возникли ошибки памяти. Конечно, вы всегда можете отложить этот лимит, применив свою сегментацию только к обновленным клиентам, а не к вашей полной базе данных, или обновив свой кластер ($$$), но в любом случае этот лимит рано или поздно наступит.

Как вы поняли из заголовка, я нашел свое счастливое место со Spark. Это было довольно сложно по двум причинам:

  1. У меня не было исходного набора данных, используемого для обучения модели sklearn K-Means, поэтому я не мог просто повторно использовать его для обучения PySpark K-Means.
  2. Существует очень мало документации и онлайн-форумов, объясняющих, как использовать PySpark K-Means.

Выполнение

Решение, которое я нашел, довольно простое:

  1. Извлеките кластерные центры K-Means.
  2. Инициализируйте PySpark K-Means и установите его центроиды с извлеченными.
  3. Проведите пустую тренировку.

Вы можете спросить: почему он обучает свои K-средние с пустым фреймом данных PySpark? Ну, это просто потому, что в то время, когда я пишу эту статью, невозможно установить центроиды без обучения модели.

Ниже приведена функция, используемая для преобразования sklearn K-Means в модель PySpark:

После того, как вы преобразовали K-Means в модель PySpark. Вы можете использовать следующую функцию, чтобы получить прогноз:

Что касается времени вычислений, PySpark K-Means борется с небольшими наборами данных, но он показывает свою реальную мощь, когда sklearn теряется с большими кадрами данных.

Вот как мы решаем проблему масштабируемости sklearn K-Means. Если вам понравилась эта статья, вас может заинтересовать статья, в которой я объясняю, как я строю свою первую модель сегментации с использованием K-средних:



Спасибо, что читаете меня!