Что такое 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:
AutoML Benchmark — Titanic Disaster
Исследуйте и запускайте код машинного обучения с помощью Kaggle Notebooks | Использование данных «Титаника — машинное обучение после стихийных бедствийwww.kaggle.com»
Ссылка
Файяд, Усама, Грегори Пиатецкий-Шапиро и Падраик Смит. От интеллектуального анализа данных к обнаружению знаний в базах данных. Журнал AI 17.3 (1996): 37–37.