Машинное обучение становится все более популярным из-за его способности автоматически учиться на данных и делать прогнозы или принимать решения без явного программирования. Однако создание моделей машинного обучения требует большого количества ручной работы, включая предварительную обработку данных, разработку функций, выбор алгоритма, настройку гиперпараметров и оценку модели. Чтобы упростить этот процесс, появились инструменты автоматизированного машинного обучения (AutoML). В этой статье мы обсудим EvalML, библиотеку AutoML с открытым исходным кодом, разработанную Alteryx.

Традиционно рабочие процессы машинного обучения включают несколько ручных шагов, включая предварительную обработку данных, разработку функций, выбор алгоритма, настройку гиперпараметров и оценку модели. Эти шаги могут занять много времени, утомительны и подвержены ошибкам. Кроме того, каждый шаг требует знания предметной области и глубокого понимания данных и алгоритмов. Автоматизированное машинное обучение (AutoML) направлено на автоматизацию как можно большего числа этих шагов, позволяя пользователям сосредоточиться на задачах высокого уровня, таких как определение проблем и бизнес-аналитика.

Что такое EvalML?

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

Как работает EvalML?

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

Что хорошего в EvalML

  1. Простой унифицированный API моделирования. EvalML упрощает процесс создания моделей машинного обучения, предоставляя унифицированный API моделирования. Пользователям нужно только указать целевой столбец данных, которые они хотят смоделировать, и EvalML автоматически выполнит предварительную обработку, разработку функций, выбор модели и настройку гиперпараметров. Это экономит время и усилия и позволяет пользователям сосредоточиться на анализе результатов. EvalML также легко интегрируется с другими инструментами с открытым исходным кодом, такими как Featuretools и Compose, что еще больше упрощает процесс проектирования функций и создания этикеток. EvalML предоставляет пользователям гибкость для определения пользовательских компонентов, конвейеров и целей в соответствии с их конкретными потребностями.
  2. Целевые функции для предметной области. Одним из ключевых преимуществ EvalML является возможность определять пользовательские целевые функции, которые соответствуют потребностям пользователей в конкретной предметной области. Это позволяет пользователям сформулировать, что делает модель ценной в их предметной области, и использовать AutoML для поиска моделей, обеспечивающих эту ценность. Пользовательские цели используются для ранжирования моделей в таблице лидеров AutoML и настройки порога классификации моделей бинарной классификации.
  3. Понимание моделей. EvalML предоставляет пользователям доступ к целому ряду моделей и инструментов для понимания моделей. Пользователи могут визуализировать важность функций и важность перестановок, частичную зависимость, точность-отзыв, матрицы путаницы, кривые ROC, объяснения прогнозов и оптимизацию порога бинарного классификатора. Это помогает пользователям лучше понять производительность своих моделей и определить области для улучшения.
  4. Проверки данных. EvalML предоставляет набор проверок данных, которые могут выявить распространенные проблемы с данными перед моделированием. Эти проверки могут помочь пользователям избежать проблем с качеством модели или загадочных ошибок и трассировки стека. Проверки данных EvalML включают в себя обнаружение целевой утечки, недопустимых типов данных, высокого дисбаланса классов, столбцов со значительными нулевыми значениями, постоянных столбцов и столбцов, которые, вероятно, являются идентификатором и бесполезны для моделирования.

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

Теперь, когда мы изучили функции и преимущества EvalML, давайте рассмотрим пример того, как его можно использовать для создания и оценки моделей машинного обучения. Мы будем использовать EvalML для прогнозирования рейтингов фильмов на основе набора данных обзоров фильмов. К концу этого примера вы будете хорошо понимать, как EvalML упрощает рабочий процесс машинного обучения и позволяет быстро создавать и оценивать модели. Итак, давайте погрузимся!

Пример: прогнозирование рейтингов фильмов с помощью EvalML

Настраивать

Чтобы следовать этому примеру, вам необходимо установить EvalML и загрузить набор данных MovieLens. Вы можете установить EvalML с помощью pip:

pip install evalml

Далее мы загрузим набор данных MovieLens. Скачать набор данных можно здесь. В этом примере мы будем использовать файл ratings.csv, который содержит рейтинги фильмов, данные пользователями.

import pandas as pd

# Load data into a pandas DataFrame
data = pd.read_csv('./ratings.csv')

# Creating X and y(target) 
data1 = data
y = data1["rating"]
X = data1.drop(columns=["rating"])

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

from evalml.data_checks import InvalidTargetDataCheck

invalid_target_check = InvalidTargetDataCheck("regression", "Root Mean Squared Error")
messages = invalid_target_check.validate(X, y)

errors = [message for message in messages if message["level"] == "error"]
warnings = [message for message in messages if message["level"] == "warning"]

for warning in warnings:
    print("Warning:", warning["message"])

for error in errors:
    print("Error:", error["message"])
from evalml.data_checks import NoVarianceDataCheck
data1 = data

y = data1["rating"]
X = data1.drop(columns=["rating"])
no_variance_data_check = NoVarianceDataCheck()
messages = no_variance_data_check.validate(X, y)

warnings = [message for message in messages if message["level"] == "warning"]

for warning in warnings:
    print("Warning:", warning["message"])
from evalml.data_checks import NullDataCheck

null_check = NullDataCheck(pct_null_col_threshold=0.8, pct_null_row_threshold=0.8)
messages = null_check.validate(data)

errors = [message for message in messages if message["level"] == "error"]
warnings = [message for message in messages if message["level"] == "warning"]

for warning in warnings:
    print("Warning:", warning["message"])

for error in errors:
    print("Error:", error["message"])

Это всего лишь несколько проверок данных, которые вы можете выполнить из множества проверок данных, которые есть в EvalML. Более полный список вы можете найти здесь.

Далее мы разделяем данные на наборы для обучения и тестирования:

from evalml.preprocessing import split_data

# Split data into training and testing sets
X_train, X_holdout, y_train, y_holdout = evalml.preprocessing.split_data(
    X, y, problem_type="regression", test_size = 0.2)

infer_feature_types — это метод в EvalML, который автоматически определяет типы каждого столбца в кадре данных pandas. Это полезно при работе с наборами данных, которые имеют различные типы данных, такие как числовые данные, категориальные данные или данные даты и времени. Используя infer_feature_types, мы можем гарантировать, что EvalML будет правильно интерпретировать каждую функцию в наборе данных и применять соответствующие методы предварительной обработки и моделирования. После того, как infer_feature_types был применен к DataFrame, мы можем получить доступ к его представлению Woodwork (ww), которое является внутренней структурой данных, используемой EvalML, которая предоставляет дополнительные метаданные и обеспечивает беспрепятственное взаимодействие между различными типами данных. Получив доступ к представлению Woodwork DataFrame, мы можем легко применить любые дальнейшие этапы предварительной обработки данных и моделирования, используя API EvalML.

from evalml.utils import infer_feature_types

X = infer_feature_types(X,)
X.ww

Когда у нас есть набор данных, нам нужно определить тип проблемы, которую мы пытаемся решить (например, классификация, регрессия, прогнозирование временных рядов и т. д.). Мы делаем это с помощью модуля ProblemTypes в EvalML. В этом примере мы решаем задачу регрессии, поэтому используем тип задачи РЕГРЕССИЯ. Определив тип проблемы, мы можем создать объект AutoMLSearch, который будет выполнять поиск наилучшего конвейера машинного обучения для использования в нашем наборе данных. Мы передаем наши обучающие данные, включая наши функции (X_train) и целевую переменную (y_train), а также тип проблемы. Затем AutoMLSearch попробует различные модели машинного обучения и методы предварительной обработки, настраивая гиперпараметры каждой модели по пути, чтобы найти наилучшее сочетание модели и гиперпараметров для нашего набора данных. После завершения поиска мы можем получить доступ к лучшему конвейеру и использовать его для прогнозирования наших тестовых данных.

from evalml.problem_types import ProblemTypes
from evalml.automl import AutoMLSearch

# Define problem type
problem_type = ProblemTypes.REGRESSION

# Create AutoMLSearch object
automl = AutoMLSearch(X_train=X_train, y_train=y_train, problem_type=problem_type)

Метод search из AutoMLSearch инициирует поиск наилучшего конвейера для решения проблемы, определяемой предоставленными данными и типом проблемы. По умолчанию он выполняет поиск по множеству компонентов конвейера и гиперпараметров, чтобы найти наилучшее сочетание методов предварительной обработки, проектирования функций и алгоритмов модели для данной задачи. Если для interactive_plot установлено значение True, метод отображает интерактивный график, который позволяет изучить результаты поиска, включая производительность различных конвейеров, опробованных во время поиска.

automl.search(interactive_plot = False)

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

Например, давайте взглянем на первый пайплайн в пакете 1: «Регрессор эластичной сети с преобразователем типов, допускающих значение Null + DateTime Featurizer + Imputer + Standard Scaler». Этот конвейер состоит из четырех компонентов: преобразователя типов, допускающих значение Null, преобразователя даты и времени, средства импутации и стандартного масштабатора. Эти преобразователи используются для предварительной обработки данных перед их подачей в Elastic Net Regressor, который служит в качестве окончательной оценки.

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

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

Для лучшего понимания модели вы также можете распечатать лучший конвейер

from evalml.model_understanding import calculate_permutation_importance

# To get the best pipeline
best_pipeline = automl.best_pipeline

#To get feature importances
best_pipeline.feature_importance


calculate_permutation_importance(
    best_pipeline, X_holdout, y_holdout, "root mean squared error"
)

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

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

EvalML может быть полезен в производственной системе машинного обучения несколькими способами. Вот несколько примеров:

  1. Автоматический выбор модели: EvalML может автоматически оценивать и выбирать наиболее эффективную модель машинного обучения для данной задачи, экономя время и усилия по сравнению с выбором модели вручную.
  2. Автоматическая настройка гиперпараметров: EvalML может автоматически искать лучшие гиперпараметры для данной модели, опять же экономя время и усилия по сравнению с ручной настройкой.
  3. Автоматизированная разработка признаков: EvalML может автоматически генерировать и выбирать соответствующие признаки для данной задачи машинного обучения, что может быть особенно полезно при работе с большими и сложными наборами данных.
  4. Интерпретация модели: EvalML предоставляет инструменты для интерпретации поведения модели и объяснения прогнозов модели, которые могут быть полезны для понимания и отладки производственных систем машинного обучения.
  5. Мониторинг производительности модели: EvalML можно использовать для мониторинга производительности модели в режиме реального времени и обнаружения изменений в производительности, что может быть полезно для выявления проблем и улучшения производительности модели с течением времени.

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

Ограничения

  1. Ограниченный выбор алгоритмов: платформа оптимизации конвейера EvalML в настоящее время поддерживает ограниченное количество алгоритмов, которые могут не охватывать все варианты использования.
  2. Ограниченная разработка функций: хотя EvalML поддерживает базовые методы разработки функций, он может не подходить для более сложных требований к разработке функций.
  3. Большие вычислительные требования: AutoML может быть дорогостоящим в вычислительном отношении, и пользователям может потребоваться выделить значительные ресурсы для запуска среды оптимизации конвейера.
  4. Ограниченная интерпретируемость: хотя EvalML предоставляет пользователям ряд инструментов для понимания модели, он может не обеспечивать такой же уровень интерпретируемости, как модель, построенная вручную.

Заключение

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