Что такое AutoML? Автоматизированное машинное обучение (AutoML) — это процесс автоматизации задач применения машинного обучения к проблемам. Жизненный цикл машинного обучения состоит из нескольких этапов, включая, помимо прочего, выбор данных, предварительную обработку данных, интеллектуальный анализ данных, оценку модели, тонкую настройку модели и ее развертывание [Адаптировано из Fayyad, 96]. Таким образом, AutoML — это процесс автоматизации одного или нескольких шагов жизненного цикла машинного обучения. Таким образом, мы можем повысить эффективность экспериментов по машинному обучению и ускорить исследования проблемы.

Как мы можем использовать AutoML? Хорошо, давайте воспользуемся AutoML. Проблема в том, что существует несколько пакетов Python, так как же мне выбрать правильный пакет для моего проекта? Не очень понятно, как это сделать; и это отнимающий много времени опыт для всех из них. В этом сообщении блога мы собираемся изучить набор из 11 (одиннадцати) хорошо известных пакетов Python для AutoML.

Настройка эксперимента

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

Набор поездов насчитывает всего 891 образец. Мы собираемся использовать этот набор для обучения и проверки наших пакетов AutoML. Затем результаты теста будут отправлены на конкурс. Мы собираемся нормализовать набор поездов, используя Encoder и Imputer (для отсутствующих данных). Я закодировал столбцы «Пол», «Поступил» в числовые столбцы и выполнил Импьютер в столбцы «Пкласс», «Пол», «СибСп», «Парч», «Тариф», «Возраст», «Поступил». Вы можете получить доступ к коду Jupyter Notebook по общедоступной ссылке в конце сообщения в блоге.

Обратите внимание, что некоторые коды написаны в Jupyter Notebook в уценке, потому что он использует несовместимые пакеты для других пакетов. Но все они имеют код установки и запуска.

# Ленивый прогноз

[GitHub, Документация] Lazy Predict помогает создавать множество базовых моделей (из scikit-learn и подобных библиотек) без большого количества кода и помогает понять, какие модели работают лучше без какой-либо настройки параметров. Другими словами, Lazy Predict — это хорошая библиотека для быстрого одновременного тестирования нескольких решений. Он включает только предварительную обработку и обучение модели; таким образом, он не выполняет тонкую настройку.

# Lazy Predict
from lazypredict.Supervised import LazyClassifier

automl = LazyClassifier()
results, _ = automl.fit(X_train, X_train, y_train, y_train)

# гиперопт-sklearn

[GitHub, Документация] hyperopt-sklearn (оптимизация гиперпараметров для scikit-learn) — выбор модели на основе гипероптимизации среди алгоритмов машинного обучения в scikit-learn. В отличие от Lazy Predict, hyperopt-sklearn может выполнять настройку гиперпараметров в моделях, но не выполняет предварительную обработку данных автоматически.

# hyperopt-sklearn
from hpsklearn import HyperoptEstimator

automl = HyperoptEstimator()
automl.fit(X_train, y_train)

# автообучение

[GitHub, Документация] auto-sklearn — это набор инструментов поверх оценщика scikit-learn. Таким образом, он сочетает в себе предварительную обработку данных, предварительную обработку признаков и оценку классификатора. Обратите внимание, что он не обучает простые модели, модели ансамбля автоматического обучения для повышения производительности. Он хорош для соревнований, но не для серийных моделей.

# auto-sklearn
from autosklearn.classification import AutoSklearnClassifier

automl = AutoSklearnClassifier()
automl.fit(X_train, y_train)

# ТПОТ

[GitHub, Документация] TPOT расшифровывается как Tree-based Pipeline Optimization Tool. Он оптимизирует конвейеры машинного обучения с помощью генетического программирования. Это выглядит как комбинация тонкой настройки hyperopt-sklearn и предварительной обработки данных auto-sklearn, однако она не объединяет модели — модели остаются простыми и интерпретируемыми. Хороший инструмент для высокой производительности и простого моделирования.

# TPOT
from tpot import TPOTClassifier

automl = TPOTClassifier()
automl.fit(X_train, y_train)

# МЛЬЯР

[GitHub, Документация] mjar-supervised описывает общий способ предварительной обработки данных, построения моделей машинного обучения и выполнения настройки гиперпараметров для поиска лучшей модели. Кроме того, он поддерживает объяснимость и автоматический анализ разведочных данных. Он содержит больше функций, чем TPOT, но и сложнее. Кроме того, он может поддерживать текстовые данные, но был разработан только для табличных данных.

# MLJAR
from supervised.automl import AutoML

automl = AutoML(mode="Compete")
automl.fit(X_train, y_train)

# ФЛАМЛ

[GitHub, Документация] FLAML — это пакет, который автоматически находит точные модели машинного обучения. Это освобождает пользователей от выбора учеников и гиперпараметров для каждого ученика. Его также можно использовать для настройки общих гиперпараметров для рабочих процессов MLOps, моделей, алгоритмов, вычислительных экспериментов, конфигураций программного обеспечения и т. д. Он содержит много функций, как и MLJAR, без объяснения причин. Кроме того, он может обрабатывать текстовые данные и работать с онлайн-обучением.

# FLAML
from flaml import AutoML

automl = AutoML()
automl.fit(X_train, y_train, task="classification")

# Автоглюон

[GitHub, Документация] AutoGluon автоматизирует задачи машинного обучения, позволяя вам легко добиться высокой производительности прогнозирования в ваших приложениях. Этот пакет предназначен для обучения, оценки, тонкой настройки и развертывания. Он может работать с текстовыми данными, табличными данными, изображениями, временными рядами и даже мультимодальными данными. На данный момент это самый надежный и универсальный инструмент AutoML.

# AutoGluon
from autogluon.tabular import TabularPredictor

automl = TabularPredictor(label="Survived", path="titanic-autogluon")
automl.fit(train) # pd.DataFrame as parameter

# H2O

[GitHub, Документация] H2O — это in-memory платформа для распределенного масштабируемого машинного обучения. Он предоставляет реализации многих популярных алгоритмов; но он не использовал реализации scikit-learn, он содержит свои собственные реализации. Он может достигать хороших результатов, но работает только со своими собственными заранее созданными алгоритмами и моделями.

# H2O
import h2o

# Start the H2O cluster (locally)
h2o.init()
# Get H2O data frame
hf_train = h2o.H2OFrame(train)

# Run the AutoML
automl = H2OAutoML()
automl.train(x=x_columns, y="Survived", training_frame=hf_train)

# АвтоКерас

[GitHub, Документация] AutoKeras — это пакет, основанный на Keras, библиотеке глубокого обучения. AutoKeras может выполнять AutoML для различных типов данных, таких как табличные, графические или даже текстовые данные. Модели глубокого обучения, как правило, хорошо работают с реальными данными.

# AutoKeras
import autokeras as ak

automl = ak.StructuredDataClassifier()
automl.fit(X_train, y_train, epochs=10)

# МЛбокс

[GitHub, Документация] MLBox обеспечивает предварительную обработку данных, выбор функций, оптимизацию гиперпараметров и оценку модели. Он содержит несколько современных моделей соревнований, таких как Deep Learning, Stacking, LightGBM. Кроме того, несколько функций интерпретации для анализа наших результатов. Работает только с табличными данными.

# MLBox
# Init MLBox
from mlbox.preprocessing import *
from mlbox.optimisation import *
from mlbox.prediction import *

# Reading data
rd = Reader(sep = ",")
df = rd.train_test_split(paths, "Survived")

# AutoML
opt = Optimiser(scoring = "accuracy", n_folds = 5)
params = opt.optimise(space, df, 15)

# Making Predictions
prd = Predictor()
prd.fit_predict(params, df)

# Пикарет

[GitHub, Документация] PyCaret — это библиотека машинного обучения с малым кодом, которая автоматизирует жизненный цикл машинного обучения. Это комплексный инструмент машинного обучения и управления моделями, который делает вас более продуктивным и ускоряет цикл эксперимента в геометрической прогрессии; AutoML — это лишь одна из функций. Это самый полный пакет в этом списке.

# PyCaret
from pycaret import classification

s = classification.setup(train, target = "Survived")
best = classification.compare_models()
classification.plot_model(best)

Заключение

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

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

Подводя итог, мне больше всего понравились Lazy Predict, TPOT, MLJAR, FLAML, AutoGluon, AutoKeras и PyCaret. Конечно, у каждого из них есть свои преимущества и недостатки. Полный код см. в Jupyter Notebook:



Ссылка

Файяд, Усама, Грегори Пиатецкий-Шапиро и Падраик Смит. От интеллектуального анализа данных к обнаружению знаний в базах данных. Журнал AI 17.3 (1996): 37–37.