Специалистам по данным нравится работать с PySpark, поскольку он помогает оптимизировать общий процесс развертывания моделей машинного обучения производственного уровня, начиная с этапа прототипирования. Исследователи данных в организациях утверждают, что это помогает им сократить объем поддержки, необходимой команде разработчиков для масштабирования моделей машинного обучения от прототипирования до производства. Если вы специалист по данным или инженер по машинному обучению, стремящийся испачкать руки с помощью PySpark, вы на правильной странице. Этот учебник по машинному обучению PySpark представляет собой руководство для начинающих по созданию и развертыванию конвейеров машинного обучения в масштабе с использованием Apache Spark с Python.

Data Scientist тратит 80% своего времени на обработку и очистку данных, но как только мы начинаем работать с большими данными, использование Python Pandas может оказаться неэффективным при работе с большими наборами данных для машинного обучения. Здесь на помощь приходит PySpark, поскольку он предоставляет различные функции, такие как запросы в SQL, работа с DataFrame, потоковая передача, машинное обучение и рефераты, которые помогают работать с большими данными. PySpark — это простой в использовании интерфейс для написания кода Apache Spark.

Почему PySpark для машинного обучения?

Более 3000 компаний используют Apache Spark, в том числе такие ведущие игроки, как Oracle, Hortonworks, Cisco, Verizon, Visa, Microsoft, Databricks и Amazon. Spark произвел фурор в прошлом году как продукт для работы с большими данными с самой короткой кривой обучения, популярный среди малых и средних предприятий и корпоративных команд. Крупные компании активно используют модели машинного обучения для прогнозного анализа и сохранения лидирующих позиций на рынке; такие модели, как логистическая регрессия, XGboost, SVM, модель классификатора случайного леса, деревья решений, модель логистической регрессии и классификатор дерева с градиентным усилением, интенсивно развертываются с их стороны.

  1. Вы получаете возможность работать с большими данными.
  2. Очень хорошая встроенная поддержка SQL.
  3. Отличная документация доступна.
  4. Поддерживает машинное обучение для контролируемых алгоритмов обучения.
  5. Обеспечивает более масштабируемый анализ.

PySpark для машинного обучения работает быстро и использует несколько машин для крупномасштабной обработки данных. Он работает на распределенных вычислениях, таких как кластеры YARN, Mesos и Standalone. PySpark имеет две основные абстракции:

  1. RDD — распределенная коллекция объектов.
  2. Dataframe — распределенный набор данных для табличных данных.

RDD — устойчивые распределенные наборы данных — это распределенная коллекция неизменяемых объектов JVM, которая позволяет очень быстро выполнять вычисления, и они являются основой искры Apache. Как следует из названия, набор данных является распределенным; он разбивается на куски на основе некоторого ключа и распределяется по узлам. Это позволяет выполнять расчеты очень быстро. RDD — это структуры данных без схемы. Они неизменны.

Dataframe — это неизменяемая распределенная коллекция данных, организованная в именованные столбцы, такие же, как таблица в реляционной базе данных. Люди, которые работают с фреймом данных pandas, могут полностью относиться к этой абстракции.

Spark MLLib использует PySpark для машинного обучения

MLLib — это библиотека машинного обучения (ML) Spark, которая помогает сделать функциональные модели машинного обучения масштабируемыми и управляемыми.

Spark MLLib состоит из встроенных инструментов, таких как.

  • Алгоритмы машинного обучения. Общие алгоритмы обучения включают модели логистической регрессии, регрессию, деревья решений, алгоритмы случайного леса и многие другие ансамблевые методы.
  • Фатуризация: извлечение признаков, масштабирование признаков, выбор признаков и уменьшение размерности.
  • Конвейеры: инструменты для построения, оценки и построения конвейеров машинного обучения.
  • Постоянство: сохранение и загрузка алгоритмов, моделей и конвейеров.

При построении модели машинного обучения специалисты по данным должны выполнять множество задач, включая очистку данных, проектирование функций, создание выводов на основе данных, построение конвейеров машинного обучения, сохранение моделей и, наконец, их развертывание. Библиотека Spark MLlib предоставляет множество функций, что делает ее предпочтительным выбором для специалистов по данным в ведущих технологических компаниях.

Как построить конвейеры машинного обучения с помощью PySpark?

PySpark предоставляет несколько API-интерфейсов для работы с DataFrames, которые облегчают работу специалистов по данным при построении конвейеров машинного обучения.

Основы конвейера машинного обучения PySpark

  • DataFrame: этот API машинного обучения такой же, как тот, который используется в Python Pandas для представления данных.
  • Преобразователи. Преобразователь — это алгоритм, который может преобразовывать один кадр данных в другой кадр данных.
  • Оценщик. При создании моделей машинного обучения мы выбираем лучшие модели, которые обучаются на нашем DataFrame и получают результаты с помощью оценщиков.
  • Конвейер. Конвейер объединяет многочисленные преобразователи и оценщики для выполнения рабочего процесса машинного обучения.

Как работают конвейеры машинного обучения PySpark?

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

  • Преобразование всего текста документа в слова.
  • Алгоритмы машинного обучения принимают только числовые значения; следовательно, преобразование текста в числовое представление является обязательным.
  • Обучите модель с учетом входных функций.

Библиотека машинного обучения PySpark (MLLib) имеет этот рабочий процесс в виде конвейера, который включает в себя несколько этапов, которые выполняются последовательно.

Принцип работы конвейера прост; он имеет определенное количество стадий, которые выполняются последовательно, как преобразователь или оценщик. На этапе Transformer мы вызываем функцию transform(), а Estimator использует метод fit(); оба эти этапа выполняются на DataFrame. Метод Pipeline fit() обычно вызывается для исходного фрейма данных, содержащего текстовые документы и функции. Метод Tokenizer transform() преобразует текстовый документ в слова, что дополнительно приводит к добавлению нового столбца/функции в наш DataFrame.

Существует два способа передачи параметров в Алгоритм машинного обучения.

  1. Установить параметры, например. Например, если LR представляет логистическую регрессию, можно вызвать LR.setMaxIter(30), чтобы сделать LR.fit() использовать не более 30 итераций.
  2. Следующим шагом является непосредственная передача методов fit() и transform() во фрейм данных.

Настройка гиперпараметров с использованием PySpark MLlib

Одной из наиболее важных задач в машинном обучении является выбор модели или использование данных для поиска наилучшей модели или параметров для данной бизнес-задачи. В MLlib есть много инструментов для выбора модели, таких как CrossValidator и TrainValidationSplit; ниже приведены функциональные возможности этих инструментов:

  • Они разбивают данные на обучающие и тестовые наборы (обычно дается распределение 80%-20%).
  • Для каждой пары обучения и тестирования итерации происходят через набор параметров.
  • Наконец, параметры модели выбираются для достижения наилучших результатов.

Перекрестная проверка в PySpark

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

Часто используемые параметры в Spark MLLib

  1. load(): считывает экземпляр ML из входного пути, ярлык read().load(path).
  2. Ранг: показывает ранг вычисленных матриц признаков (количество признаков).
  3. Итерации: определяет количество итераций. (по умолчанию 5).
  4. Лямбда: это параметр регуляризации. (по умолчанию: 0,01).
  5. Блоки: используется для распараллеливания вычислений. (по умолчанию: -1).
  6. Nonnegative: получает неотрицательное значение или значение по умолчанию.
  7. fit(): Подгоняет модель к входному набору данных с необязательными параметрами.
  8. clear(param): Удаляет параметр из карты параметров, если он был задан явно.
  9. write(): возвращает экземпляр MLWriter для этого экземпляра ML.
  10. save(): сохраните этот экземпляр ML по указанному пути, ярлык «write().save(path)».

Пример машинного обучения PySpark для реализации линейной регрессии

Модель линейной регрессии предсказывает непрерывное значение по заданным функциям. Регрессионная модель нацелена на прогнозные значения, основанные на независимых переменных, которые также используются для поиска взаимосвязи между переменными и прогнозированием.

Импорт библиотек

Создание Spark Session и чтение файла CSV, который вы можете найти Insurance.CSV.

Исследование данных для лучшего понимания с помощью образцов данных.

Наши данные состоят из 7 столбцов, в которых столбец «Стоимость» является нашей зависимой переменной, а «возраст», «пол», «ИМТ», «дети», «курильщик» и «регион». являются независимыми переменными.

Выполнение исследовательского анализа данных

Исследовательский анализ данных — это процесс проведения первоначальных экспериментов с данными для обнаружения закономерностей, выявления выбросов и проверки предположений с помощью статистики и графических представлений. Здесь мы используем функцию данных describe для получения статистики наших данных.

Использование StringIndexer для работы с категориальными данными

StringIndexer:ониспользуется для преобразования строкового столбца в числовую форму. Он присваивает уникальные значения каждой из категорий, представленных в соответствующем столбце.

Выходные переменные

Из вывода видно, что такие столбцы, как дочерние элементы, регион и курильщик, были присвоены числовым значениям из строки.

Разработка функций

Учитывая несколько столбцов, нам нужно объединить их в один столбец с помощью VectorAssembler. Это преобразователь признаков, который объединяет несколько столбцов в векторный столбец. Можно выбрать количество столбцов, используемых в качестве входных объектов, и передать только эти столбцы через VectorAssembler. Мы передадим все семь входных столбцов, чтобы создать в нашем случае один столбец вектора признаков.

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

Вывод: здесь функции столбца представляют значения VectorAssembler.

Теперь, когда у нас есть готовые функции и известны входные переменные, давайте соберем их вместе и погрузимся в технику машинного обучения.

Разделение набора данных

Разделение данных на обучающие и тестовые наборы для обучения нашей модели и проверки ее эффективности.

Проверяем статистику нашего поезда и тестовых наборов.

  • Создание и обучение модели линейной регрессии

В этой части мы строим и обучаем модель линейной регрессии, используя функции входных и выходных столбцов. Мы также можем получить коэффициенты и перехватить значения модели. Мы также можем оценить производительность модели на обучающих данных, используя r2. Эта модель дает очень хорошую точность (77%) для обучающих наборов данных, которую мы увидим через некоторое время.

Математика измерения значения R-квадрата

Предположим, что без линейной регрессии ошибка суммы в квадрате приближается к 158, а после применения модели линейной регрессии мы получаем это значение до 1,2; давайте проверим способ расчета значения R-квадрата:

TSS (общая сумма квадратов ошибок) = SSE (сумма квадратов ошибок) + SSR (остаточная сумма квадратов ошибок)

Общая сумма квадратов представляет собой сумму квадратов разницы между фактическим и средним значениями и всегда является фиксированной. Это равно 158.

SSE — это квадрат разницы между фактическими и прогнозируемыми значениями целевой переменной, который, как уже упоминалось, составляет 1,2 после использования линейной регрессии.

SSR — это сумма квадратов, объясненная регрессией, и ее можно рассчитать с помощью (TSS — SSE).

Мы используем функцию оценки, чтобы делать прогнозы для тестовых данных, и можем использовать r2 для проверки точности модели на тестовых данных.

ССР = 158–1,2 = 156,8

'rsquare'(Коэффициент детерминации) = SSR/TSS = 156,8/158 = 0,99

Этот процент указывает на то, что модель линейной регрессии может прогнозировать с точностью 99 % размер заработной платы с учетом возраста человека. Другой 1% можно отнести к ошибкам, которые модель не может объяснить. Наша линия линейной регрессии хорошо соответствует модели, но это также может быть случаем переобучения.

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

С точки зрения линейной регрессии можно использовать методы регуляризации Ridge, Lasso или Elasticnet для обработки переобучения. Ридж-регрессия также известна как регуляризация L2. Он фокусируется на ограничении значений коэффициентов входных признаков близкими к нулю, тогда как регрессия Лассо (L1) обнуляет некоторые коэффициенты, чтобы улучшить обобщение модели. Elasticnet представляет собой комбинацию обоих методов.

Регрессия по-прежнему является параметрическим подходом и предполагает несколько основных шаблонов распределения точек входных данных. Модель линейной регрессии не работает хорошо, если входные данные не соответствуют этим предположениям. Следовательно, важно пройтись по этим предположениям, прежде чем использовать модель линейной регрессии.

  • Между входными и выходными переменными должна быть линейная зависимость.
  • Независимые переменные (входные признаки) не должны коррелировать друг с другом (это также называется мультиколлинеарностью).
  • Между значениями ошибок не должно быть корреляции.
  • Между ошибкой и выходной переменной должна быть линейная зависимость.
  • Значения ошибок должны быть нормально распределены.

Пример линейной регрессии PySpark с исходным кодом

Название изображения: Пример линейной регрессии PySpark

Теперь следующим шагом будет передача тренировочного набора в нашу модель и его оценка на тестовых данных.

Название изображения: PySpark Linear Regression RSquared Error

Мы видим, что полученное значение R-квадрата составляет 0,77 или 77%, что вполне прилично, учитывая, что мы не проводили исследовательский анализ данных и настройку гиперпараметров.

R-квадрат (R² или коэффициент детерминации) – это статистический термин, используемый в регрессионной модели, который помогает определить долю дисперсии целевой переменной, которую может объяснить независимая переменная. Другими словами, r-квадрат показывает, насколько данные соответствуют регрессионной модели.

Давайте создадим несколько прогнозов на основе модели

Название изображения: Особенности модели машинного обучения линейной регрессии PySpark

Прогноз линейной регрессии PySpark

Мы видим, что полученное значение R-квадрата составляет 0,85 или 85%, что довольно хорошо, учитывая, что мы не проводили исследовательский анализ данных и настройку гиперпараметров.

На этом изображении вы можете увидеть функции и прогнозы, сделанные моделью на тестовых данных.

3 лучших идеи проекта машинного обучения PySpark для практики

  1. Прогнозирование дефолта по кредиту с помощью машинного обучения

Основная идея этого проекта машинного обучения состоит в том, чтобы построить модель, которая будет классифицировать, сколько кредита может взять пользователь. Вы можете создать конвейер машинного обучения pyspark с нуля, чтобы предсказать дефолт по кредиту.

2. Проект машинного обучения PySpark для обнаружения поддельных новостей

Здесь вы научитесь отличать фейковые новости от настоящих. Вы можете построить модель машинного обучения на основе наивной байесовской или логистической регрессии, реализованной с использованием кадров данных PySpark и встроенных алгоритмических реализаций в Spark MLlib.

3. Проект детектора цен на биткойны

С ростом популярности биткойнов создайте модель машинного обучения PySpark для прогнозирования будущей цены биткойнов с использованием методов прогнозирования.

Сейчас лучшее время для изучения PySpark!

Спрос на PySpark вырос из-за его различной совместимости с наукой о данных, обработки больших объемов данных и обеспечения кластерных вычислений. MLLib пытается заполнить этот пробел, особенно для инженеров, незнакомых с теорией машинного обучения, но желающих включить функции прогнозирования в свои проекты с большими данными. Тем не менее, экосистема Spark растет очень быстро и в настоящее время является одним из крупнейших имен в экосистеме кластерных вычислений. Обе технологии (PySpark и Hadoop) готовы к производству и используются сотнями компаний по всему миру. Конкуренция здорова, и инженеры по данным и ученые должны изучить PySpark для машинного обучения.