Обучение модели с помощью Sk-learn и прогнозирование с помощью PySpark

Введение

Большие данные продолжают расти в геометрической прогрессии. Это привело к взрывному спросу на распределенные вычислительные платформы, такие как PySpark и Spark, которые стали стандартными инструментами в наборе инструментов любого специалиста по данным. Если вы уже использовали PySpark для машинного обучения, вы, вероятно, заметили, что он не такой простой и интуитивно понятный, как некоторые другие библиотеки Python, такие как Sk-learn.

Одним очевидным недостатком построения модели на Python (например, с помощью Sk-learn) является то, что обучающие данные ограничены объемом данных, которые панды могут удобно читать или загружать, особенно для быстрой итерации.

Но что, если бы вы могли обучать модель на Python и быть полностью гибкими в отношении размера ваших данных — подвергать модель гораздо большему набору данных, который не может быть так легко прочитан пандами?

Это на самом деле очень возможно. Ниже приведены несколько строк кода, которые показывают, как построить модель в Sk-learn, сохранить ее, обернуть в PySpark UDF и использовать для прогнозирования в PySpark DataFrame.

Comet Artifacts позволяет отслеживать и воспроизводить сложные сценарии с несколькими экспериментами, повторно использовать точки данных и легко повторять наборы данных. Прочитайте этот краткий обзор Artifacts, чтобы узнать обо всем, на что он способен.

Демонстрация решения

1. Обучение модели в Sk-learn

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
#  import the dataset
X, y = load_iris(return_X_y=True, as_frame=True)
# split in training and test set
X_train, X_test, y_train, y_test = train_test_split(X, 
                                                    y, 
                                                    test_size=0.3, 
                                                    random_state=42)
logreg = LogisticRegression()
# Create an instance of Logistic Regression Classifier and train the model.
logreg.fit(X_train, y_train)

Дополнительную информацию о функции load_iris от Sk-learn см. здесь. Дополнительную информацию о реализации логистической регрессии Sk-learn можно найти здесь.

2. Сохраните модель

import joblib
path = 'log_model.joblib'
joblib.dump(model, path)

3. Загрузите модель

import joblib
log_model = joblib.load(path)

Хотя в приведенных выше двух блоках кода используется библиотека Joblib, для сохранения и загрузки модели можно использовать библиотеку pickle или любую другую подобную библиотеку. Также обратите внимание, что путь к модели может быть в любом локальном каталоге или облачном хранилище.

4. Оберните модель в пользовательскую функцию Pyspark.

from pyspark.sql import SparkSession
from pyspark import SparkContext
from pyspark.sql.functions import udf
spark = SparkSession.builder.master("local[*]").getOrCreate()
sc = spark.sparkContext
broadcast_model = sc.broadcast(log_model)
@udf('integer')
def predict_data(*cols):
   return int(broadcast_model.value.predict((cols,)))

Приведенный выше код включает в себя трансляцию модели исполнителям Spark. Этот метод позволяет один раз прочитать модель с диска и отправить (транслировать) модель всем исполнителям Spark.

5. Чтение фрейма данных PySpark

# sample of unseen data
df = spark.createDataFrame(X_test)

В этой демонстрации фрейм данных X_test pandas использовался в качестве входных данных при создании фрейма данных Spark. Это для простоты. На самом деле данные в основном считываются непосредственно из облачных хранилищ или баз данных с гораздо большим объемом данных.

6. Прогнозирование кадра данных PySpark

list_of_columns = df.columns
df = df.withColumn("prediction", predict_data(*list_of_columns))

Заключение

Большие данные будут только увеличиваться. К счастью, существует несколько способов управления этим с помощью машинного обучения и распределенных вычислений. Удобное создание модели Proof of Concept (POC) на python (с уже существующими модулями для действительного анализа и настройки модели), а затем масштабирование обработки предсказания модели путем ее упаковки и трансляции в PySpark также является хорошим вариантом.

Подпишитесь на Medium по этой ссылке и получите полный доступ ко всем историям на Medium

Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая редакционная служба Heartbeat спонсируется и публикуется Comet — платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое. это поможет вам быстрее создавать более качественные модели машинного обучения.