Введение в AutoML - приготовление с помощью TPOT

Этот блог написан и поддерживается студентами программы профессионального магистра в Школе компьютерных наук Университета Саймона Фрейзера в рамках их кредита на курс. Чтобы узнать больше об этой уникальной программе, посетите {sfu.ca/computing/pmp}.

Пытаетесь определить лучший конвейер машинного обучения? Вот 10-минутный ускоренный курс, который вам поможет!

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

В таком случае автоматизированное машинное обучение - AutoML и инструмент оптимизации конвейеров на основе дерева - TPOT может стать вашими лучшими друзьями. Эта статья будет кратким курсом, который познакомит вас с основами AutoML и одной из его самых известных библиотек - TPOT - всего за 10 минут! Давайте начнем!

Что такое AutoML?

AutoML пытается полностью или частично автоматизировать рабочий процесс машинного обучения. В традиционном рабочем процессе машинного обучения все еще есть несколько этапов, требующих значительного объема ручной работы и знаний предметной области. Сюда входят очистка данных, предварительная обработка функций, выбор функций, построение функций, выбор модели и оптимизация (гипер) параметров. Инструменты и платформы AutoML нацелены на автоматизацию нескольких этапов этого рабочего процесса, предоставляя частичное или полное конвейерное решение.

Заменит ли AutoML специалистов по обработке данных?

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

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

TPOT: генетически модифицированный AutoML

Если вы ищете пакет AutoML, с которым можно поиграть, TPOT должен стать вашим первым портом захода из-за его популярности и доступности. TPOT из всех доступных пакетов AutoML , имеет наибольшее количество звезд, форков и участников Github. По данным PyPI Stats, это также один из самых загружаемых пакетов AutoML.

Цель TPOT - найти лучший конвейер машинного обучения на основе дерева, который использует операции машинного обучения (предварительная обработка функций, выбор функций, выбор модели и настройка гиперпараметров) в качестве узлов дерева.

Ниже приведена иллюстрация конвейера на основе дерева, выбранного TPOT:

TPOT использует метод, называемый алгоритмом генетического программирования (GP), чтобы выбрать лучший конвейер. Узлы (кружки на рисунке 2) в древовидном конвейере называются операторами машинного обучения (ML). Короче говоря, TPOT использует алгоритм GP для выбора лучшего древовидного конвейера, состоящего из операторов машинного обучения.

Итак, что такое операторы машинного обучения?

Вот три типа операторов машинного обучения:

  1. Контролируемые операторы классификации: включают модели из scikit-learn и XGBoost.
  2. Операторы обработки функций: импортированы из `sklearn.preprocessing`
  3. Операторы выбора функций: импортированы из `sklearn.feature_selection`

Но что такое алгоритм генетического программирования (GP)?

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

  1. Инициализация: случайным образом генерирует 100 древовидных конвейеров.
  2. Оценка и выбор: из 100 конвейеров он выбирает 20 лучших конвейеров, используя схему выбора NSGA-II, которая направлена ​​на максимизацию сбалансированной точности перекрестной проверки и минимизацию количества операторов.
  3. Кроссовер и мутация: каждый из 20 выбранных конвейеров производит пять копий (потомков), причем 5% конвейеров пересекаются с еще 5%, и у 90% конвейеров вероятность 1/3 либо заменяется точкой, либо вставляется, либо сжимается

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

После инициализации алгоритм будет выполнять шаги (2) - (3) повторно в течение 100 итераций (поколений). Затем TPOT вернет наиболее эффективный конвейер.

Как заварить чай (?) с TPOT

Итак, теперь вы знаете, как работает TPOT, давайте рассмотрим несколько примеров, чтобы увидеть, насколько просто использовать TPOT! Автоматическое машинное обучение TPOT можно использовать как для задач регрессии с учителем, так и для задач классификации. В отличие от традиционного процесса поиска моделей, препроцессоров, оценщиков и выдергивания волос, чтобы усовершенствовать функции, TPOT - это процесс «одним щелчком», который найдет лучший конвейер и вернет работоспособный файл Python.

Прежде всего, перед использованием TPOT вам необходимо установить TPOT. Однако, поскольку TPOT построен на нескольких библиотеках Python, вам нужно будет установить их все, чтобы получить максимальную отдачу от TPOT (я обещаю, что проблема того стоит!). Основные пакеты: numpy, scipy, scikit-learn, DEAP, update_check, tqdm, stopit, pandas, joblib и xgboost.

Есть также дополнительные пакеты, которые можно установить, если вы изучаете параллельные вычисления (Dask), многофакторное уменьшение размерности (TPOT-MDR) или нейронные сети (PyTorch / TPOT-NN).

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

# using pip
pip install tpot
# using conda-forge
conda install -c conda-forge tpot

Общий рабочий процесс TPOT состоит в том, чтобы сначала разделить набор данных на обучающие и тестовые наборы. Следующим шагом является объявление типа конвейера TPOT (классификация или регрессия) для построения и установки гиперпараметров в функции. Затем выполняется обучение для выбора лучших конвейеров с помощью генетического программирования. Последний шаг - либо экспортировать обученный конвейер для использования в будущем, либо вызвать дополнительные функции для отображения результатов или прогнозов.

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

  • поколения: количество итераций для оптимизации конвейера.
  • Population_size: размер поколения, сохраненный за счет генетического программирования.
  • многословие: режим вывода связи из TPOT
  • random_state: семя для генерации тех же результатов с тем же набором данных

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

from tpot import TPOTClassifier # for classifier
from tpot import TPOTRegressor # for regressor
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import numpy as np

Первый пример - это пример классификатора, использующего набор данных «wine» из scikit-learn.

wine = load_wine()
X_train, X_test, y_train, y_test = train_test_split(wine.data,\
wine.target, train_size=0.75, test_size=0.25, random_state=20)
tpot_classifier = TPOTClassifier(generations=80,\
population_size=80,verbosity=2, random_state=20)
tpot_classifier.fit(X_train, y_train)

Второй пример - это регрессионный пример с использованием набора данных «диабет» из scikit-learn.

diabetes = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(diabetes.data,\
diabetes.target, train_size=0.75, test_size=0.25, random_state=20)
tpot_regressor = TPOTRegressor(generations=80, population_size=80,\
verbosity=2, random_state=20)
tpot_regressor.fit(X_train, y_train)

TPOT также поставляется с функцией оценки / прогнозирования, которая может использовать выбранный конвейер для прогнозирования. Обратите внимание, ‹model› ниже можно заменить на tpot_regressor или tpot_classifier из приведенного выше обучения.

<model>.predict(X_test)
<model>.score(X_test, y_test)
<model>.predict_proba(X_test) # only in Classification datasets

Посмотрите, насколько удобен TPOT? Кстати, не забудьте экспортировать копию конвейера с помощью следующей команды.

<model>.export(‘tpot_pipeline.py’)

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

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# NOTE: Make sure that the outcome column is labeled ‘target’ in the data file
tpot_data = pd.read_csv(‘PATH/TO/DATA/FILE’, sep=’COLUMN_SEPARATOR’\
,dtype=np.float64)
features = tpot_data.drop(‘target’, axis=1)
training_features, testing_features, training_target,\
testing_target = train_test_split(features, tpot_data[‘target’],\ random_state=None)
# Average CV score on the training set was: 0.9974999999999999
exported_pipeline = RandomForestClassifier(bootstrap=True,\ criterion=”entropy”, max_features=0.6000000000000001,\ min_samples_leaf=19, min_samples_split=18, n_estimators=100)
exported_pipeline.fit(training_features, training_target)
results = exported_pipeline.predict(testing_features)

Обратите внимание, что примеры не содержат нейронные сети TPOT, параллельное обучение, самоопределяемые функции оценки, настройки оператора и шаблоны конвейеров. Пожалуйста, проверьте документацию и статью TPOT, если вам требуются дополнительные знания по этим предметам.

Чем хорош TPOT?

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

Однако… .. это так

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

Нет TPOT? Как насчет инфузора или…

Если вы все еще не уверены на 100 процентов в использовании TPOT - вот еще несколько интересных библиотек AutoML, которые вы, возможно, захотите рассмотреть:

  • Авто-WEKA

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

  • Авто-обучение

Auto-sklearn расширяет подход в AutoWEKA с помощью библиотеки Python scikit-learn и является заменой для обычных классификаторов и регрессоров scikit-learn. Автосканирование предназначено для повышения эффективности поиска и создания апостериорного ансамбля для объединения моделей, сгенерированных в процессе оптимизации гиперпараметров. Auto-sklearn также превосходит Auto-WEKA, потому что он использует мета-обучение, которое действует как горячий старт в процедуре поиска. Другими словами, поиск, скорее всего, начнется с лучших конвейеров.

  • H2O AutoML

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

Пора окунуться!

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

Ссылки:

Ссылка:

Figure 1: R. Olson et. al. (2016) “Evaluation of a Tree-based Pipeline Optimization Tool for Automating Data Science.”
Figure 2: R. Olson et. al. (2016) “TPOT: A Tree-based Pipeline Optimization Tool for Automating Machine Learning”
Figure 4: Tu, H., & Nair, V. (2018). Is one hyperparameter optimizer enough? Proceedings of the 4th ACM SIGSOFT International Workshop on Software Analytics.
Figure 5: Fernando López. (2020). Auto-Sklearn: An AutoML tool based on Bayesian Optimization
Figure 6: Parul Pandey. (2019). A Deep dive into H2O’s AutoML

Спасибо за чтение!