Узнайте, как использовать AutoML, чтобы максимизировать результаты ваших рабочих процессов машинного обучения.

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

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

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

Automated Machine Learning предоставляет методы и процессы, позволяющие сделать машинное обучение доступным для специалистов, не занимающихся машинным обучением, повысить эффективность машинного обучения и ускорить исследования в области машинного обучения.

Хотя существует множество пакетов AutoML, таких как AutoWEKA, Auto-PyTorch или MLBoX, в этой статье основное внимание будет уделено Auto-Sklearn — библиотеке, построенной на основе популярный пакет scikit-learn.

Что такое Auto-Sklearn?

Auto-Sklearn — это библиотека с открытым исходным кодом на основе Python, которая автоматизирует процессы машинного обучения, такие как предварительная обработка данных и функций, выбор алгоритма, оптимизация гиперпараметров и построение ансамбля. Для достижения такой высокой степени автоматизации библиотека использует последние достижения в области байесовской оптимизации, а также учитывает прошлые результаты работы с аналогичными наборами данных.

В частности, он улучшает предыдущие методы по трем ключевым направлениям. Во-первых, в нем представлена ​​концепция горячего старта Байесовская оптимизация, которая позволяет эффективно настраивать гиперпараметры для нескольких наборов данных, используя информацию, полученную в ходе предыдущих запусков. Кроме того, он обеспечивает автоматическое построение ансамбля моделей, учитываемых байесовской оптимизацией, что еще больше повышает производительность модели. Наконец, Auto-Sklearn поставляется с высокопараметризированной структурой машинного обучения, которая включает в себя высокопроизводительные классификаторы и препроцессоры из scikit-learn, что позволяет создавать гибкие и настраиваемые модели.

Всего Auto-Sklearn содержит 16 классификаторов, 14 методов предварительной обработки признаков и многочисленные методы предварительной обработки данных, которые в совокупности дают пространство гипотез со 122 гиперпараметрами. Эти цифры постоянно пополняются новыми выпусками.

Реализация этой библиотеки довольно проста. На самом деле, самая сложная часть — это его установка, поскольку он несовместим с Windows и, как сообщается, также имеет некоторые проблемы на Mac. Поэтому рекомендуется запускать его в операционной системе Linux (совет: Google Colab работает в Linux, поэтому вы можете использовать его в качестве площадки для экспериментов).

После установки Auto-Sklearn можно запустить всего четырьмя строками кода:

import autosklearn.classification

clf = autosklearn.classification.AutoSklearnClassifier()
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)

Тем не менее, по-прежнему рекомендуется некоторая ручная настройка и параметризация, чтобы привести намерения пользователя в соответствие с выходными данными модели. Давайте теперь посмотрим, как Auto-Sklearn можно использовать на практике.

Практический пример

В этом примере мы сравним производительность одного классификатора с параметрами по умолчанию — в данном случае я выбрал классификатор дерева решений — с классификатором Auto-Sklearn. Для этого мы будем использовать общедоступный набор данных Optical Recognition of Handwriting Digits, в котором каждый образец состоит из изображения цифры 8x8 — следовательно, размерность равна 64. В целом, это набор данных состоит из 1797 образцов, которые относятся к 10 уникальным классам (~ 180 образцов на класс).

Вот несколько примеров этого набора данных:

Набор данных можно загрузить в Python и разделить на обучающие и тестовые наборы следующим образом:

from sklearn import datasets
from sklearn.model_selection import train_test_split

X, y = datasets.load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Тест: классификатор дерева решений

Во-первых, давайте обучим простое дерево решений с параметрами по умолчанию в этом наборе данных и посмотрим, насколько хорошо оно работает в этих обстоятельствах.

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

clf = DecisionTreeClassifier().fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracy_score(y_test, y_pred)

Этот простой подход дает точность 86,67% — прилично, но не совсем экстраординарно. Давайте посмотрим, сможем ли мы превзойти этот результат с помощью Auto-Sklearn.

Авто-Sklearn

Прежде чем запустить это, давайте сначала определим некоторые параметры:

  • time_left_for_this_task: лимит времени в секундах для общей продолжительности поиска. Чем выше этот предел, тем выше шансы найти лучшие модели. Значение по умолчанию — 3600, что соответствует 1 часу.
  • per_run_time_limit: ограничение по времени для одного вызова модели машинного обучения. Если алгоритм превысит этот предел, подгонка модели будет прекращена.
  • ensemble_size: Количество моделей, добавленных в ансамбль. Можно установить значение 1, если не требуется подгонка ансамбля.

Теперь мы можем подобрать модель с помощью Auto-Sklearn. Мы позволим задаче работать в течение 3 минут и ограничим время для одного вызова модели до 30 секунд:

import autosklearn.classification
from sklearn.metrics import accuracy_score

automl = autosklearn.classification.AutoSklearnClassifier(
    time_left_for_this_task = 3*60,
    per_run_time_limit = 30
)
automl.fit(X_train, y_train)
y_pred = automl.predict(X_test)
accuracy_score(y_test, y_pred)

Это дает нам точность 98,67% — значительное увеличение по сравнению с нашим упрощенным тестом.

Мы можем получить дополнительную информацию о процессе обучения с помощью метода sprint.statistics():

print(automl.sprint_statistics())

Например, мы видим, что наша лучшая оценка проверки составила 98,88%, что 23 из 30 алгоритмов успешно запустились, 6 истекло время ожидания и 1 превысил лимит памяти. Исходя из этого, мы могли бы увеличить параметры ограничения времени, чтобы увидеть, повысит ли это производительность еще больше.

Используя метод leaderboard(), мы также можем визуализировать таблицу результатов для всех оцененных моделей (к вашему сведению: эта таблица была визуализирована в виде леденца на палочке, который является характерным изображением этой статьи):

print(automl.leaderboard())

Более подробную информацию об отдельных моделях, вошедших в ансамбль, можно получить через функцию show_models():

from pprint import pprint
pprint(automl.show_models(), indent=2)

Примечание. Хотя ансамбли, безусловно, могут повысить производительность и надежность моделей, у них есть некоторые недостатки, такие как повышенная сложность, увеличение времени обучения и отсутствие интерпретируемости. Подгонку ансамбля можно деактивировать следующим образом: ensemble_size=1.

Auto-Sklearn 2.0 — что нового?

В прошлом году различные улучшения Auto-Sklearn были опубликованы в документе под названием Auto-Sklearn 2.0: AutoML без помощи рук с помощью метаобучения. Среди основных улучшений: (1) ранняя остановка, которая повышает эффективность и гарантирует получение результата, даже если время обучения истекло, (2) улучшенные стратегии выбора модели, который включает в себя интеграцию нескольких подходов для аппроксимации ошибки обобщения и добавление Байесовской оптимизации и гиперполосы (BOHB), универсального инструмента для оптимизации гиперпараметров в масштабе, и (3) автоматический выбор политики посредством метаобучения, который облегчает пользователю от выбора конфигурации системы AutoML.

Заключение

Подводя итог, Auto-Sklearn — это мощная и удобная библиотека, которая освобождает пользователя от довольно сложных и трудоемких задач предварительной обработки данных и признаков, выбора модели, настройки гиперпараметров и, при желании, построения ансамбля. Было показано, что это значительно повышает производительность и эффективность различных задач машинного обучения. Несмотря на необходимость некоторого пользовательского ввода, Auto-Sklearn достаточно автоматизирован и, следовательно, также позволяет новичкам и нетехническим пользователям реализовывать сложные решения машинного обучения всего в нескольких строках кода.

Хотите попробовать сами? Ознакомьтесь с множеством примеров, предоставленных сообществом AutoML.

Дополнительные ресурсы

Понравилась эта статья?

Подключаемся! Вы можете найти меня в Twitter, LinkedIn и Substack.
Если вы хотите поддержать меня, вы можете сделать это через Medium Membership, который также предоставляет вам доступ ко всем моим историям. как и у тысяч других писателей на Medium.