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

В этом блоге представлен краткий обзор того, как запустить эксперимент AutoML из пакета SDK для машинного обучения Azure.

Задачи и алгоритмы автоматизированного машинного обучения

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

Машинное обучение Azure обучает модели для следующих типов задач машинного обучения:

  • Классификация
  • Регресс
  • Прогнозирование временных рядов

Кроме того, Azure AutoML включает поддержку множества часто используемых алгоритмов для этих задач, в том числе:

Алгоритмы классификации

  • Логистическая регрессия
  • Машина для повышения светового градиента (GBM)
  • Древо решений
  • Случайный лес
  • Наивный байесовский
  • Линейная машина опорных векторов (SVM)
  • XGBoost
  • Классификатор глубоких нейронных сетей (DNN)
  • Другое…

Алгоритмы регрессии

  • Линейная регрессия
  • Машина для повышения светового градиента (GBM)
  • Древо решений
  • Случайный лес
  • Эластичная сетка
  • ЛАРС Лассо
  • XGBoost
  • Другое…

Алгоритмы прогнозирования

  • Линейная регрессия
  • Машина для повышения светового градиента (GBM)
  • Древо решений
  • Случайный лес
  • Эластичная сетка
  • ЛАРС Лассо
  • XGBoost
  • Другое…

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

Настройка эксперимента по автоматизированному машинному обучению с помощью SDK

В то время как пользовательский интерфейс предоставляет интуитивно понятный способ выбора опций для автоматизированного эксперимента с машинным обучением, использование SDK дает пользователю большую гибкость для настройки экспериментов и мониторинга выполнения. Здесь я перечислил семь шагов, которые помогут пользователям запустить AutoML через SDK.

Шаг 1. Создайте вычислительную цель

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

Возможность назначать запуски экспериментов конкретным целевым объектам вычислений помогает реализовать гибкую экосистему науки о данных следующими способами:

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

Одним из основных преимуществ облачных вычислений является возможность управлять расходами, платя только за то, что вы используете. В Машинном обучении Azure вы можете воспользоваться этим принципом, определив целевые объекты вычислений, которые:

  • Запуск по запросу и автоматический останов, если он больше не нужен.
  • Автоматическое масштабирование в зависимости от потребностей обработки рабочей нагрузки.

Полную документацию по вычислительным целям можно найти здесь:

Машинное обучение Azure включает возможность создавать вычислительные экземпляры в рабочей области для обеспечения среды разработки (Jupyter Notebook, Jupyer Lab, RStudio и SSH), управляемой вместе со всеми другими активами в рабочей области.

Шаг 2. Установка пакета SDK для машинного обучения Azure для Python

pip install azureml-sdk

SDK включает дополнительные дополнения, которые не требуются для основных операций, но могут быть полезны в некоторых сценариях. Например, в блокноты дополнительно входят виджеты для отображения подробных результатов в Jupyter Notebooks, в дополнительные блоки входят пакеты для автоматизированного обучения машинному обучению, а в дополнительные пояснения входят пакеты для генерации пояснений к модели. Чтобы установить дополнения, укажите их в скобках, как показано здесь:

pip install azureml-sdk[notebooks, automl,explain]

Дополнительные сведения: Дополнительные сведения об установке пакета SDK машинного обучения Azure для Python см. В документации SDK. Кроме того, вы должны знать, что SDK регулярно обновляется, и изучать примечания к выпуску последнего выпуска.

Шаг 3: Указание данных для обучения

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

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

При использовании SDK для запуска эксперимента с автоматическим машинным обучением вы можете отправить данные следующими способами:

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

Альтернативно:

  • Укажите набор данных, фрейм данных или массив значений X, содержащий обучающие функции, с соответствующим массивом y значений меток.
  • При необходимости укажите наборы данных X_valid и y_valid, фреймы данных или несколько массивов значений X_valid, которые будут использоваться для проверки.

Подсказка 1: AML имеет встроенную функцию профилирования данных, которая позволяет пользователям исследовать свои зарегистрированные наборы данных:

Если вы хотите использовать эту функцию в своем эксперименте с SDK, вы можете использовать фактический пакет python (pandas_profiling) и после установки пакета создать [отчет профиля, запустите:

profile = ProfileReport(df, title="Pandas Profiling Report")

Это достигается простым отображением отчета. В Jupyter Notebook запустите:

profile.to_widgets()

Отчет HTML можно включить в блокнот Jupyter:

Запустите следующий код:

profile.to_notebook_iframe()

Сохранение отчета

Если вы хотите создать файл отчета HTML, сохраните ProfileReport в объекте и используйте функцию to_file():

profile.to_file("your_report.html")

В качестве альтернативы вы можете получить данные в формате json:

# As a string
json_data = profile.to_json()
# As a file
profile.to_file("your_report.json")

Шаг 4: подключение к рабочему пространству

После установки пакета SDK в среде Python вы можете написать код для подключения к своей рабочей области и выполнения операций машинного обучения. Самый простой способ подключиться к рабочей области - использовать файл конфигурации рабочей области, который включает сведения о подписке Azure, группе ресурсов и рабочей области, как показано здесь:

{     
      "subscription_id": "<subscription-id>",     
      "resource_group": "<resource-group>",     
      "workspace_name": "<workspace-name>" 
}

Чтобы подключиться к рабочей области с помощью файла конфигурации, вы можете использовать метод from_config класса Workspace в SDK, как показано здесь:

from azureml.core import Workspace
subscription_id = '<subscription-id>'
resource_group  = '<resource-group>'
workspace_name  = '<workspace-name>'
try:
    ws = Workspace(subscription_id = subscription_id, resource_group = resource_group, workspace_name = workspace_name)
    ws.write_config()
    print('Library configuration succeeded')
except:
    print('Workspace not found')

Шаг 5. Настройка эксперимента по автоматизированному машинному обучению

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

automl_settings = {
    "n_cross_validations": 3,
    "primary_metric": 'average_precision_score_weighted',
    "enable_early_stopping": True,
    "max_concurrent_iterations": 2, # This is a limit for testing purpose, please increase it as per cluster size
    "experiment_timeout_hours": 0.25, # This is a time limit for testing purposes, remove it for real use cases, this will drastically limit ablity to find the best model possible
    "verbosity": logging.INFO,
}

automl_config = AutoMLConfig(task = 'classification',
                             debug_log = 'automl_errors.log',
                             compute_target = compute_target,
                             training_data = training_data,
                             label_column_name = label_column_name,
                             **automl_settings
                            )

Шаг 6. Проведение эксперимента по автоматизированному машинному обучению

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

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

Вы можете отправить автоматизированный эксперимент с машинным обучением, как и любой другой эксперимент на основе SDK:

from azureml.core.experiment import Experiment
 
automl_experiment = experiment(ws,'automl_experiment')
automl_run = automl_experiment.submit(automl_config)
automl_run.wait_for_completion(show_output=True)

Шаг 7. Получение наилучшего прогона и его модели

Вы можете легко определить лучший запуск в студии машинного обучения Azure и загрузить или развернуть сгенерированную им модель. Чтобы выполнить это программно с помощью SDK, вы можете использовать код, подобный следующему примеру:

best_run, fitted_model = automl_run.get_output()
print(best_run)
print(fitted_model)

Подсказка 2: контекст проведения эксперимента

В дополнение к лучшей модели при отправке эксперимента вы используете его контекст выполнения для инициализации и завершения запуска эксперимента, отслеживаемого в Машинном обучении Azure, как показано в следующем примере кода:

automl_run = experiment.start_logging()
run = automl_run.get_context() # allow_offline=True by default, so can be run locally as well    
...    
run.log("Accuracy", 0.98)    
run.log_row("Performance", epoch=e, error=err)

Показатели регистрации

Каждый эксперимент генерирует файлы журнала, которые включают сообщения, которые будут записаны в терминал во время интерактивного выполнения. Это позволяет использовать простые операторы print для записи сообщений в журнал. Однако, если вы хотите записать именованные метрики для сравнения между запусками, вы можете сделать это с помощью объекта Run; который предоставляет ряд функций регистрации специально для этой цели. К ним относятся:

  • log: записать одно именованное значение.
  • log_list: записать именованный список значений.
  • log_row: запись строки с несколькими столбцами.
  • log_table: записать словарь в виде таблицы.
  • log_image: запись файла изображения или сюжета.

Дополнительная информация. Дополнительные сведения о регистрации метрик во время экспериментов см. в разделе Мониторинг выполнения экспериментов и метрик Azure ML в документации по машинному обучению Azure.

Получение и просмотр зарегистрированных показателей

Вы можете просмотреть метрики, зарегистрированные в ходе эксперимента в студии машинного обучения Azure, или с помощью виджета RunDetails в записной книжке, как показано здесь:

from azureml.widgets import RunDetails
RunDetails(automl_run).show()

Вы также можете получить метрики с помощью метода get_metrics объекта Run, который возвращает JSON-представление метрик, как показано здесь:

best_run_metrics = best_run.get_metrics() # or other runs with runID
for metric_name in best_run_metrics:
     metric = best_run_metrics[metric_name]
     print(metric_name, metric)

Еще один хороший метод выполнения - get_properties, который позволяет вам извлекать последние свойства выполнения из службы и возвращать тип dict, который может быть запросом для определенных свойств, таких как итерация, имя алгоритма, имя класса и многие другие полезные функции, которые нужно извлечь.

Еще один полезный метод get_status, который возвращает стандартные возвращаемые значения, включая «Выполняется», «Завершено» и «Неудачно».

while automl_run.get_status() not in ['Completed','Failed']: 
    print('Run {} not in terminal state'.format(atoml_run.id))
    time.sleep(10) 

В следующем примере кода показаны некоторые варианты использования метода list.

favorite_completed_runs = automl_run.list(experiment, status='Completed', tags = 'favorite')
all_distinc_runs = automl_run.list(experiment)
and_their_children = automl_run.list(experiment, include_children=True)
only_script_runs = Run.list(experiment,, type=ScriptRun.RUN_TYPE)

Полный список методов см. В документации API Azure ML.