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

Введение

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

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

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

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

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

Глубокое обучение — это еще один зонтичный термин (теперь он становится похожим на начало!), который охватывает различные методы, характеризующиеся их глубокими стеками вычислений. Нейронные сети — определяющая модель глубокого обучения; они пытаются имитировать поведение человеческого мозга, позволяя алгоритмам изучать более сложные модели.

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

Рабочий процесс машинного обучения

Прежде чем мы углубимся в PyCaret, давайте поговорим о типичном рабочем процессе машинного обучения. На рисунке ниже показан пример, который Amazon Web Services (AWS) использует для обучения и развертывания своих моделей.

Вот разбивка того, что обычно происходит на каждом этапе:

  1. Выборка — это просто место, где мы собираем данные для указанной задачи.
  2. Чистый — нам нужен чистый набор данных, чтобы улучшить производительность модели. Это может означать заполнение отсутствующих данных, удаление выбросов, переформатирование данных и т. д.
  3. Подготовка — это этап, на котором мы проводим исследовательский анализ данных, выполняем выбор функций (сообщаем модели, какие функции использовать) и разрабатываем функции (создаем новые функции). Здесь же мы разделяем данные на обучающие и тестовые наборы и выполняем масштабирование функций.
  4. Модель обучения. Используя обучающие данные и набор алгоритмов, создавайте модели для выполнения определенной задачи. Оптимизируйте гиперпараметры с помощью перекрестной проверки.
  5. Оцените модель — проверьте, насколько хорошо обученные модели работают с невидимыми тестовыми данными. Выберите лучшую модель (ы), чтобы продолжить.
  6. Развертывание в рабочей среде — настройте архитектуру, необходимую для использования выбранных моделей.
  7. Мониторинг и оценка — после развертывания модели (моделей) продолжайте собирать данные и отслеживать производительность модели. Если мы видим ухудшение точности (также известное как дрейф), пришло время повторить цикл рабочего процесса.

Машинное обучение — это непрерывный цикл. По данным Forbes, специалисты по данным тратят около 60% своего времени на очистку и организацию данных [3]. Это одна из областей, где PyCaret может облегчить жизнь.

Так что же такое PyCaret?

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

По сравнению с другими библиотеками машинного обучения с открытым исходным кодом, PyCaret представляет собой альтернативу с низким кодом, которую можно использовать для замены сотен строк кода всего несколькими. По сути, это оболочка Python для нескольких библиотек машинного обучения, таких как scikit-learn, XGBoost, LightGBM и многих других.

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

PyCaret в настоящее время имеет семь модулей, каждый из которых имеет определенный вариант использования. Это:

Что оно может делать?

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

  1. Импутация (очистка) — Импутация — это процесс обработки пропущенных значений в наборе данных. PyCaret поддерживает как простые, так и итеративные методы вменения.
  2. Обнаружение выбросов (очистка) — PyCaret может выявлять и удалять выбросы из набора данных до этапа обучения. Выбросы могут исказить распределение данных и дать вводящие в заблуждение представления, которые мы не хотим, чтобы наши модели изучали.
  3. Нормализация (подготовка) — нормализация — это процесс масштабирования числовых значений в наборе данных без искажения относительных расстояний или потери информации. Это распространенный метод подготовки данных, который имеет решающее значение для алгоритмов, использующих метрики расстояния, такие как k-средних.
  4. Вывод и управление типами данных (Подготовка) — PyCaret может автоматически определять типы данных объектов. Алгоритмы машинного обучения требуют числовых данных, поэтому PyCaret обрабатывает любые необходимые преобразования, такие как горячее и порядковое кодирование.
  5. Выбор признаков (подготовка). Используя несколько контролируемых методов выбора признаков, PyCaret может удалять признаки, мало влияющие на прогнозирование целевой переменной. Работа с подмножеством функций снижает риск переобучения, повышает точность и сокращает время обучения. PyCaret также может удалять сильно коррелированные функции, что помогает создавать более стабильные коэффициенты модели.
  6. Инжиниринг признаков (подготовка). Обычно два признака, объединенные с помощьюарифметической операции, могут иметь большее значение для объяснения дисперсии, чем те же два признака по отдельности. PyCaret может создавать новые функции на основе взаимодействия существующих функций. Существует также функциональность для бинирования числовых признаков и создания кластеров.
  7. Сравните модели (модели обучения и оценки) — PyCaret может сравнивать многочисленные модели с перекрестной проверкой для данной проблемы. Затем он ранжирует производительность этих моделей в порядке от лучшего к худшему.
  8. Оптимизация модели (обучение и оценка моделей) — гиперпараметры модели могут быть автоматически оптимизированы с использованием нескольких различных алгоритмов. Также могут быть созданы собранные, сложенные и смешанные модели.
  9. Постройте модели (оцените модели) — в PyCaret есть встроенная функция, которая обеспечивает быстрые и подробные графики, с помощью которых мы можем оценить производительность модели.
  10. Сохранение моделей (развертывание в рабочей среде). Когда мы закончим использовать PyCaret для всего вышеперечисленного, мы можем сохранить весь конвейер модели в файл выбора. Это означает, что все, что мы сделали для создания нашей модели, включая все преобразования данных и т. д., будет сохранено в одном месте и использовано в производстве.

PyCaret в действии

Теперь, когда мы увидели кое-что из того, на что способен PyCaret, давайте попробуем! Мы будем использовать набор данных Flight Price Prediction, который доступен на Kaggle здесь [4].

Давай начнем!

Во-первых, нам нужно загрузить набор данных и просмотреть информацию, которую он предоставляет. В этом примере мы будем загружать только первые 5000 строк набора данных (поскольку полный файл содержит более 300 тысяч наблюдений!).

# Import Pandas
import pandas as pd

# Load the first 5000 rows of the flight data
data = pd.read_csv(r'flight_data.csv', nrows = 5000)

# Drop the first column as this doesn't provide anything
data.drop(columns = ['Unnamed: 0'], inplace = True)

# Print the rows and columns
print(data.shape)

# Display the dataset
data.head()

Мы видим, что наши данные содержат 5000 строк и 11 столбцов. Из этих столбцов 8 категориальные и 3 числовые. Это считается контролируемой задачей обучения, поскольку мы пометили данные. В частности, это задача регрессии, поскольку мы пытаемся предсказать цену полета, которая является непрерывной величиной.

Теперь мы хотим импортировать модуль регрессии PyCaret и вызвать метод setup; который, по сути, просто сообщает PyCaret, как мы хотим, чтобы он работал. В методе настройки много параметров, однако большинство из них являются необязательными. Документацию можно найти здесь для полного списка (специфических для регрессии) параметров.

# Import PyCaret's regression module
from pycaret.regression import *

# Call the setup method so PyCaret knows how to operate
model_setup = setup(data = data     # The dataset we want to use
   , target = 'price'               # The feature we want to predict
   , fold = 5                       # Number of folds for cross-validation
   , train_size = 0.70              # Proportion of data used for training
   , silent = False                 # Auto infer datatypes
   , verbose = False                # Display data
   , session_id = 0                 # Random state
   , normalize = True               # Scale data to have mean = 0, std = 1
   , remove_outliers = True         # Remove outliers
   , feature_selection = True       # Remove unimportant features
   , remove_multicollinearity= True # Remove highly correlated features
)

Мы видим, что PyCaret правильно определил все типы данных, поэтому мы можем перейти к следующему шагу; сравнение моделей.

Как обсуждалось ранее, PyCaret — это оболочка для многих библиотек машинного обучения. Когда мы даем ему проблему, он использует все, что есть в его арсенале, чтобы решить эту проблему. Вызывая метод compare_models, мы попросили PyCaret обучить экземпляр каждой имеющейся у него модели, применимой к проблеме регрессии. Затем он оценит и вернет их в порядке от лучшего к худшему, что оценивается по указанной нами метрике (MAE).

# Compare all models
best = compare_models(sort = 'MAE'  # Sort performance by MAE
         , turbo = True             # Exclude slow training models
         , verbose = True           # Display data
         , exclude = ['lar','lr']   # Exclude these models
         , n_select = 1             # Return the best n model(s)
)

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

Метод tune_model будет обучать и оценивать альтернативные версии нашей модели, изменяя различные гиперпараметры в попытке их оптимизировать. Он делает это, выбирая алгоритм поиска из указанной библиотеки поиска. Например, PyCaret по умолчанию использует случайный поиск по сетке sci-kit-learn, но это можно изменить.

# Optimize hyper-parameters for our best model
tuned = tune_model(estimator = best # Model to tune
       , choose_better = True       # Return the best possible model
       , verbose = True             # Display data
       , n_iter = 5                 # Try n searches for better parameters
       , optimize = 'MAE'           # The metric to optimize
)

Мы видим, что MAE не уменьшился в 5 случайных поисках сетки, которые выполнил PyCaret; таким образом, вывод tune_model — это та же самая модель, которую мы предоставили. Часто этого не будет, но может случиться.

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

# Plot model residuals
plot_model(tuned, plot = 'residuals')

Из этого остаточного графика видно, что наша модель исключительно хорошо работала на обучающем наборе данных с R2, равным 0,979, тогда как тестовый набор данных имеет более низкую оценку 0,810. Это может означать, что модель подходит к тренировочным данным, однако она по-прежнему достаточно хорошо обобщается для наших требований.

Это подчеркивает одну из самых больших проблем с автоматическим машинным обучением; Когда у нас есть так много моделей, которые автоматически обучаются, как мы можем гарантировать, что они не все подходят или не подходят? Я оставлю этот вопрос здесь как возможность для дальнейшего чтения.

# Plot feature importance
plot_model(tuned, plot = 'feature')

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

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

# Retrain the model on the whole dataset
finalize_model(tuned)

# Save the model pipeline to a pickle file
save_model(tuned, r'flight_data_random_forest')

Вот и все! Теперь мы можем использовать нашу замаринованную модель в производственной среде, отслеживать ее производительность и переобучать ее при необходимости.

Выводы

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

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

В этом посте мы только поверхностно рассмотрели возможности автоматизированного машинного обучения! Чтобы узнать больше о PyCaret, перейдите по этой ссылке.

Спасибо за чтение этой статьи; вы можете подписаться на меня, чтобы узнавать о следующих публикациях о науке о данных, машинном обучении и автоматизации.

Не стесняйтесь комментировать, если у вас есть какие-либо вопросы, или хлопать👏, если вы нашли это интересным.

#DataScience #MachineLearning #PyCaret #AutoML #Python

Источники

[1] Машинное обучение для всех :: Простыми словами. С реальными примерами. Да, опять :: vas3k.com

[2] Машинное обучение с помощью Amazon SageMaker — Amazon SageMaker

[3] Очистка больших данных: самая трудоемкая и наименее приятная задача по науке о данных, говорится в опросе (forbes.com)

[4] Прогноз цен на рейсы | Kaggle