Обучение модели с помощью 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, чтобы получать ресурсы, события и многое другое. это поможет вам быстрее создавать более качественные модели машинного обучения.