Машинное обучение становится все более популярным из-за его способности автоматически учиться на данных и делать прогнозы или принимать решения без явного программирования. Однако создание моделей машинного обучения требует большого количества ручной работы, включая предварительную обработку данных, разработку функций, выбор алгоритма, настройку гиперпараметров и оценку модели. Чтобы упростить этот процесс, появились инструменты автоматизированного машинного обучения (AutoML). В этой статье мы обсудим EvalML, библиотеку AutoML с открытым исходным кодом, разработанную Alteryx.
Традиционно рабочие процессы машинного обучения включают несколько ручных шагов, включая предварительную обработку данных, разработку функций, выбор алгоритма, настройку гиперпараметров и оценку модели. Эти шаги могут занять много времени, утомительны и подвержены ошибкам. Кроме того, каждый шаг требует знания предметной области и глубокого понимания данных и алгоритмов. Автоматизированное машинное обучение (AutoML) направлено на автоматизацию как можно большего числа этих шагов, позволяя пользователям сосредоточиться на задачах высокого уровня, таких как определение проблем и бизнес-аналитика.
Что такое EvalML?
EvalML — это библиотека AutoML с открытым исходным кодом, разработанная Alteryx, которая автоматизирует сквозной процесс машинного обучения, включая предварительную обработку данных, разработку функций, выбор алгоритма, настройку гиперпараметров и оценку модели. EvalML прост в использовании, масштабируется и настраивается, что делает его подходящим как для начинающих, так и для экспертов. EvalML поддерживает обучение как с учителем, так и без учителя, а также задачи регрессии и классификации.
Как работает EvalML?
EvalML работает, автоматизируя конвейер машинного обучения с помощью среды оптимизации конвейера. Структура оптимизации конвейера использует генетический алгоритм для поиска в пространстве возможных конвейеров, где каждый конвейер состоит из последовательности шагов предварительной обработки данных, разработки признаков и построения модели. Генетический алгоритм оценивает производительность каждого конвейера на проверочном наборе и выбирает наиболее эффективный конвейер на основе заданной пользователем целевой функции. EvalML также использует байесовский алгоритм оптимизации для настройки гиперпараметров выбранной модели.
Что хорошего в EvalML
- Простой унифицированный API моделирования. EvalML упрощает процесс создания моделей машинного обучения, предоставляя унифицированный API моделирования. Пользователям нужно только указать целевой столбец данных, которые они хотят смоделировать, и EvalML автоматически выполнит предварительную обработку, разработку функций, выбор модели и настройку гиперпараметров. Это экономит время и усилия и позволяет пользователям сосредоточиться на анализе результатов. EvalML также легко интегрируется с другими инструментами с открытым исходным кодом, такими как Featuretools и Compose, что еще больше упрощает процесс проектирования функций и создания этикеток. EvalML предоставляет пользователям гибкость для определения пользовательских компонентов, конвейеров и целей в соответствии с их конкретными потребностями.
- Целевые функции для предметной области. Одним из ключевых преимуществ EvalML является возможность определять пользовательские целевые функции, которые соответствуют потребностям пользователей в конкретной предметной области. Это позволяет пользователям сформулировать, что делает модель ценной в их предметной области, и использовать AutoML для поиска моделей, обеспечивающих эту ценность. Пользовательские цели используются для ранжирования моделей в таблице лидеров AutoML и настройки порога классификации моделей бинарной классификации.
- Понимание моделей. EvalML предоставляет пользователям доступ к целому ряду моделей и инструментов для понимания моделей. Пользователи могут визуализировать важность функций и важность перестановок, частичную зависимость, точность-отзыв, матрицы путаницы, кривые ROC, объяснения прогнозов и оптимизацию порога бинарного классификатора. Это помогает пользователям лучше понять производительность своих моделей и определить области для улучшения.
- Проверки данных. 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 может быть полезен в производственной системе машинного обучения несколькими способами. Вот несколько примеров:
- Автоматический выбор модели: EvalML может автоматически оценивать и выбирать наиболее эффективную модель машинного обучения для данной задачи, экономя время и усилия по сравнению с выбором модели вручную.
- Автоматическая настройка гиперпараметров: EvalML может автоматически искать лучшие гиперпараметры для данной модели, опять же экономя время и усилия по сравнению с ручной настройкой.
- Автоматизированная разработка признаков: EvalML может автоматически генерировать и выбирать соответствующие признаки для данной задачи машинного обучения, что может быть особенно полезно при работе с большими и сложными наборами данных.
- Интерпретация модели: EvalML предоставляет инструменты для интерпретации поведения модели и объяснения прогнозов модели, которые могут быть полезны для понимания и отладки производственных систем машинного обучения.
- Мониторинг производительности модели: EvalML можно использовать для мониторинга производительности модели в режиме реального времени и обнаружения изменений в производительности, что может быть полезно для выявления проблем и улучшения производительности модели с течением времени.
В заключение следует отметить, что он упрощает процесс создания и понимания моделей машинного обучения, предоставляет пользователям возможность гибко настраивать свои модели в соответствии со своими конкретными потребностями и помогает выявлять распространенные проблемы с данными до того, как они вызовут проблемы с качеством модели.
Ограничения
- Ограниченный выбор алгоритмов: платформа оптимизации конвейера EvalML в настоящее время поддерживает ограниченное количество алгоритмов, которые могут не охватывать все варианты использования.
- Ограниченная разработка функций: хотя EvalML поддерживает базовые методы разработки функций, он может не подходить для более сложных требований к разработке функций.
- Большие вычислительные требования: AutoML может быть дорогостоящим в вычислительном отношении, и пользователям может потребоваться выделить значительные ресурсы для запуска среды оптимизации конвейера.
- Ограниченная интерпретируемость: хотя EvalML предоставляет пользователям ряд инструментов для понимания модели, он может не обеспечивать такой же уровень интерпретируемости, как модель, построенная вручную.
Заключение
В целом, EvalML — это мощный инструмент AutoML, который упрощает процесс машинного обучения, предоставляет пользователям ряд параметров настройки и помогает пользователям избежать распространенных проблем с моделированием. Однако у него есть некоторые ограничения, особенно в отношении выбора алгоритма и разработки функций. Пользователи должны тщательно учитывать эти ограничения при принятии решения об использовании EvalML для своего конкретного варианта использования.