Настройка обучения AutoML с помощью пакета SDK Python для Машинного обучения Azure версии 2

ОБЛАСТЬ ПРИМЕНЕНИЯ: пакет SDK для Python azure-ai-ml версии 2 (текущая версия)

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

Если вы предпочитаете работать без кода, можно также настроить обучение AutoML без кода в Студии машинного обучения Azure.

Если вы предпочитаете отправлять задания обучения с помощью расширения Azure Machine Learning CLI версии 2, см. статью Обучение моделей.

Предварительные требования

Для работы с этой статьей вам потребуется следующее:

Настройка рабочей области

Чтобы подключиться к рабочей области, необходимо указать подписку, группу ресурсов и имя рабочей области. Эти сведения используются в от azure.ai.ml , MLClient чтобы получить дескриптор необходимой рабочей области Машинного обучения Azure.

В следующем примере используется проверка подлинности Azure по умолчанию вместе с конфигурацией рабочей области по умолчанию или из любого файла config.json, скопированного в структуру папок. Если не config.json найдено, необходимо вручную ввести subscription_id, resource_group и рабочую область при создании MLClient.

from azure.identity import DefaultAzureCredential
from azure.ai.ml import MLClient

credential = DefaultAzureCredential()
ml_client = None
try:
    ml_client = MLClient.from_config(credential)
except Exception as ex:
    print(ex)
    # Enter details of your Azure Machine Learning workspace
    subscription_id = "<SUBSCRIPTION_ID>"
    resource_group = "<RESOURCE_GROUP>"
    workspace = "<AZUREML_WORKSPACE_NAME>"
    ml_client = MLClient(credential, subscription_id, resource_group, workspace)

Источник данных и формат

Чтобы предоставить обучающие данные для автоматизированного машинного обучения в пакете SDK версии 2, необходимо отправить их в облако с помощью MLTable.

Требования к данным, отправляемым в MLTable:

  • Данные должны иметь табличный формат.
  • Прогнозируемое значение (целевой столбец) должно присутствовать в данных.

Обучающие данные должны быть доступны из удаленной вычислительной среды. Служба автоматизированного машинного обучения версии 2 (пакет SDK Python и CLI/YAML) принимает ресурсы данных MLTable (версия 2), однако для обратной совместимости она также поддерживает табличные наборы данных версии 1 из версии 1 (зарегистрированный табличный набор данных) с использованием тех же свойств входного набора данных. Тем не менее, рекомендуется использовать MLTable версии 2.

Следующий код YAML содержит определение MLTable, которое можно поместить в локальную папку или удаленную папку в облаке вместе с файлом данных (файл с расширением CSV или файл Parquet).

# MLTable definition file

paths:
  - file: ./bank_marketing_train_data.csv
transformations:
  - read_delimited:
        delimiter: ','
        encoding: 'ascii'

Таким образом, папка MLTable будет содержать файл определения MLTable и файл данных (в данном случае это файл bank_marketing_train_data.csv).

Ниже демонстрируются два способа создания MLTable.

  • A. Предоставление обучающих данных и файла определения MLTable из локальной папки, которые будут автоматически отправлены в облако (хранилище данных рабочей области по умолчанию)
  • Б. Предоставление таблицы MLTable, которая уже зарегистрирована и отправлена в облако.
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import automl, Input

# A. Create MLTable for training data from your local directory
my_training_data_input = Input(
    type=AssetTypes.MLTABLE, path="./data/training-mltable-folder"
)

# B. Remote MLTable definition
my_training_data_input  = Input(type=AssetTypes.MLTABLE, path="azureml://datastores/workspaceblobstore/paths/Classification/Train")

Обучение, проверка и тестирование данных

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

Если явно не указать validation_data параметр или n_cross_validation , автоматизированное машинное обучение применяет методы по умолчанию, чтобы определить, как выполняется проверка. Это определение зависит от количества строк в наборе данных, назначенном в параметре training_data.

Объем данных обучения Метод проверки
Более 20 000 строк Применяется разбиение данных по обучению и проверке. Значение по умолчанию — использовать 10 % начального набора данных для обучения в качестве набора проверки. В свою очередь, этот набор проверки используется для вычисления метрик.
Не больше 20 000 строк Применяется подход перекрестной проверки. Стандартное количество сверток зависит от числа строк.
Если набор данных содержит менее 1000 строк, то используется 10 сверток.
Если число строк от 1000 до 20 000 включительно, то используются три свертки.

Объект вычислений для выполнения эксперимента

Автоматизированные задания машинного обучения с пакетом SDK для Python версии 2 (или CLI версии 2) в настоящее время поддерживаются только в удаленных вычислительных ресурсах Машинного обучения Azure (кластере или вычислительном экземпляре).

Узнайте больше о создании вычислительных ресурсов с помощью пакета SDK версии 2 (или CLI версии 2) Python.

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

Доступно несколько параметров, с помощью которых можно настроить эксперименты автоматического машинного обучения. Эти параметры конфигурации задаются в методе задачи. Также можно задать параметры обучения заданий и критерии выхода с помощью соответственно функций set_training() и set_limits().

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

# note that the below is a code snippet -- you might have to modify the variable values to run it successfully
classification_job = automl.classification(
    compute=my_compute_name,
    experiment_name=my_exp_name,
    training_data=my_training_data_input,
    target_column_name="y",
    primary_metric="accuracy",
    n_cross_validations=5,
    enable_model_explainability=True,
    tags={"my_custom_tag": "My custom value"}
)

# Limits are all optional

classification_job.set_limits(
    timeout_minutes=600, 
    trial_timeout_minutes=20, 
    max_trials=5,
    enable_early_termination=True,
)

# Training properties are optional
classification_job.set_training(
    blocked_training_algorithms=["LogisticRegression"], 
    enable_onnx_compatible_models=True
)

Выбор типа задачи машинного обучения (проблема машинного обучения)

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

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

Поддерживаемые алгоритмы

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

Метод задачи определяет список применяемых алгоритмов и моделей. Используйте параметры allowed_training_algorithms или blocked_training_algorithms в методе задания set_training() для дополнительного изменения итераций с помощью доступных моделей для включения или исключения.

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

Классификация Регрессия Прогнозирование временных рядов
Логистическая регрессия* Эластичная сеть* AutoARIMA
Упрощенный алгоритм GBM* Упрощенный алгоритм GBM* Prophet
Градиентное усиление* Градиентное усиление* Эластичная сеть
Дерево принятия решений* Дерево принятия решений* Упрощенный алгоритм GBM
Алгоритм "К ближайших соседей"* Алгоритм "К ближайших соседей"* Алгоритм "К ближайших соседей"
Линейная классификация опорных векторов* Лассо LARS* Дерево принятия решений
Классификация опорных векторов (SVC)* Стохастический градиентный спуск (SGD)* Arimax
Случайный лес* Случайный лес Лассо LARS
Крайне случайные деревья* Крайне случайные деревья* Крайне случайные деревья*
Xgboost* Xgboost* Случайный лес
Упрощенный алгоритм Байеса* Xgboost ForecastTCN
Стохастический градиентный спуск (SGD)* Стохастический градиентный спуск (SGD) Градиентное усиление
ExponentialSmoothing
SeasonalNaive
Среднее
Naive
SeasonalAverage

С использованием дополнительных алгоритмов ниже.

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

Основная метрика

Параметр primary_metric определяет используемые метрики во время обучения и оптимизации модели. Доступная для выбора метрика определяется выбранным вами типом задачи.

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

Сведения об определениях этих метрик см. в статье Общие сведения о результатах автоматизированного машинного обучения.

Метрики для сценариев многоклассовой классификации

Эти метрики применяются для всех сценариев классификации, включая табличные данные, изображения, компьютерное зрение и текст для обработки естественного языка.

Метрики, зависящие от пороговых значений, такие как accuracy, recall_score_weighted, norm_macro_recallи precision_score_weighted , могут также не оптимизироваться для небольших наборов данных, имеющих большое неравномерное распределение классов (несбалансированность классов) или когда ожидаемое значение метрики очень близко к 0,0 или 1,0. В таких случаях AUC_weighted может быть лучшим выбором в качестве основной метрики. После завершения автоматического машинного обучения можно выбрать эффективную модель на основе метрики, наиболее подходящей для ваших бизнес-задач.

Метрика Пример (-ы) использования
accuracy Классификация изображений, анализ тональности, прогнозирование оттока клиентов
AUC_weighted Обнаружение мошенничества, классификация изображений, обнаружение аномалий или нежелательной почты
average_precision_score_weighted Анализ мнений
norm_macro_recall Прогнозирование оттока клиентов
precision_score_weighted

Метрики для сценариев многометочной классификации

  • Для классификации текста в настоящее время единственная основная метрика поддерживается с несколькими метками "Точность".

  • Для многометочной классификации изображений поддерживаются основные метрики, определенные в перечислении ClassificationMultilabelPrimaryMetrics.

Метрики для сценариев распознавания именованных сущностей текста для обработки естественного языка

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

Метрики для сценариев регрессии

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

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

Примечание

r2_score и normalized_root_mean_squared_error также ведут себя как основные метрики. Если применяется фиксированный набор проверки, эти две метрики оптимизируют один и тот же целевой объект, среднеквадратическую погрешность и оптимизируются с помощью одной и той же модели. Если доступен только набор обучения и применяется перекрестная проверка, они будут немного отличаться, так как нормализатор для normalized_root_mean_squared_error зафиксирован в диапазоне обучающего набора, но нормализатор для r2_score будет отличаться для каждой свертки, представляя собой вариантность для каждой свертки.

Если интересует ранг, а не точное значение, spearman_correlation может быть лучшим выбором, так как измеряет корреляцию между реальными значениями и прогнозами.

Однако в настоящее время никакие первичные метрики для регрессии не связаны с относительными различиями. Как r2_score, так и normalized_mean_absolute_error, и normalized_root_mean_squared_error обрабатывают ошибку прогнозирования 20 тыс. долл. как для работника с заработной платой 30 тыс. долл., так и для работника, зарабатывающего 20 млн долл., если эти две точки данных относятся к одному и тому же набору данных для регрессии или к тому же временному ряду, заданному идентификатором временного ряда. В то время как на самом деле, прогнозирование только $ 20k от заработной платы $ 20 млн очень близко (небольшая относительная разница 0,1%, в то время как $ 20k от $ 30k не близко (большая относительная разница 67 %). Для решения проблемы относительной разницы можно обучить модель с доступными основными метриками, а затем выбрать модель с лучшим mean_absolute_percentage_error или root_mean_squared_log_error.

Метрика Пример (-ы) использования
spearman_correlation
normalized_root_mean_squared_error Прогноз цен (на недвижимость или продукт), проверка прогнозируемой оценки
r2_score Задержка авиарейса, оценка зарплаты, время разрешения ошибки
normalized_mean_absolute_error

Метрики для сценариев прогнозирования временных рядов

Рекомендации аналогичны рекомендациям для сценариев регрессии.

Метрика Пример (-ы) использования
normalized_root_mean_squared_error Прогнозирование цен, оптимизация запасов, прогнозирование спроса
r2_score Прогнозирование цен, оптимизация запасов, прогнозирование спроса
normalized_mean_absolute_error

Метрики для сценариев обнаружения объектов на изображениях

  • Для обнаружения объектов на изображениях поддерживаются основные метрики, определенные в перечислении ObjectDetectionPrimaryMetrics.

Метрики для сценариев сегментации экземпляров изображений

  • Для сценариев сегментации экземпляров изображений поддерживаются основные метрики, определенные в перечислении InstanceSegmentationPrimaryMetrics.

Конструирование признаков

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

Примечание

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

При настройке заданий автоматизированного машинного обучения можно включить или отключить параметры featurization с помощью метода задания .set_featurization().

В приведенной ниже таблице показаны допустимые параметры для конструирования признаков.

Конфигурация конструирования признаков Описание
"mode": 'auto' Указывает, что в рамках предварительной обработки проверка данных и шаги конструирования признаков выполняются автоматически. Значение по умолчанию.
"mode": 'off' Указывает, что шаг конструирования признаков не должен выполняться автоматически.
"mode": 'custom' Указывает, что следует использовать настраиваемый шаг конструирования признаков.

В следующем коде показано, как можно реализовать настраиваемое конструирование признаков, в данном случае для задания регрессии.

from azure.ai.ml.automl import ColumnTransformer

transformer_params = {
    "imputer": [
        ColumnTransformer(fields=["CACH"], parameters={"strategy": "most_frequent"}),
        ColumnTransformer(fields=["PRP"], parameters={"strategy": "most_frequent"}),
    ],
}
regression_job.set_featurization(
    mode="custom",
    transformer_params=transformer_params,
    blocked_transformers=["LabelEncoding"],
    column_name_and_types={"CHMIN": "Categorical"},
)

Условия выхода

В функции set_limits() можно определить несколько параметров для завершения эксперимента до завершения задания.

Критерии description
Нет условий Если вы не определяете параметры выхода, эксперимент продолжается до тех пор, пока не будет выполнено дальнейшее выполнение основной метрики.
timeout Определяет, как долго (в минутах) должен продолжаться выполнение эксперимента. Если значение не указано, общее время ожидания задания по умолчанию составляет 6 дней (8640 минут). Чтобы указать время ожидания меньше или равное 1 часу (60 минутам), убедитесь, что размер набора данных не превышает 10 000 000 (столбец времени строк) или результаты ошибки.

Это время ожидания включает в себя запуски настройки, конструирования признаков и обучения, но не включает запуски ensembling и объяснение модели в конце процесса, так как эти действия должны выполняться после завершения всех испытаний (заданий для детей).
trial_timeout_minutes Максимальное время в минутах, в течение которого каждое испытание (дочернее задание) может выполняться до завершения. Если значение не указано, используется значение, равное 1 месяцу или 43 200 минутам.
enable_early_termination Следует ли завершать задание, если оценка не улучшается за короткое время.
max_trials Максимальное количество сочетаний испытаний и запусков с различными комбинациями алгоритмов и гиперпараметров, которые выполняются в рамках задания автоматизированного машинного обучения. Если значение, не указано, по умолчанию используется 1000 испытаний. Если используется параметр enable_early_termination, количество испытаний может быть меньше.
max_concurrent_trials Это максимальное количество испытаний (дочерних параметров), которые могут выполняться параллельно. Рекомендуется, чтобы это значение соответствовало количеству узлов в кластере.

Выполнение эксперимента

Примечание

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

Предупреждение

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

Отправьте эксперимент для выполнения и создания модели. С помощью созданного MLClient в предварительных требованиях можно выполнить следующую команду в рабочей области.


# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
    classification_job
)  # submit the job to the backend

print(f"Created job: {returned_job}")

# Get a URL for the status of the job
returned_job.services["Studio"].endpoint

Множественные дочерние запуски в кластерах

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

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

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

Настройте max_concurrent_iterations в методе задания .set_limits(). Если параметр не настроен, то по умолчанию для каждого эксперимента разрешен только один одновременный дочерний запуск (итерация). В случае с вычислительным экземпляром можно задать то же значение max_concurrent_trials, что и число ядер в виртуальной машине вычислительного экземпляра.

Изучение моделей и метрик

Автоматическое Машинное обучение позволяет отслеживать и оценивать результаты обучения.

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

Регистрация и развертывание моделей

После проверки модели и подтверждения ее использования в рабочей среде ее можно зарегистрировать для последующего использования.

Совет

Для зарегистрированных моделей развертывание одним щелчком доступно через Студию машинного обучения Azure. См. статью Развертывание зарегистрированных моделей из студии.

AutoML в конвейерах

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

Ниже приведен пример конвейера с компонентом классификации AutoML и компонентом команды, который показывает полученные выходные данные AutoML. Обратите внимание, как различные этапы ссылаются на входные (данные проверки и обучения) и выходные (оптимальная модель) данные.

# Define pipeline
@pipeline(
    description="AutoML Classification Pipeline",
    )
def automl_classification(
    classification_train_data,
    classification_validation_data
):
    # define the automl classification task with automl function
    classification_node = classification(
        training_data=classification_train_data,
        validation_data=classification_validation_data,
        target_column_name="y",
        primary_metric="accuracy",
        # currently need to specify outputs "mlflow_model" explictly to reference it in following nodes 
        outputs={"best_model": Output(type="mlflow_model")},
    )
    # set limits and training
    classification_node.set_limits(max_trials=1)
    classification_node.set_training(enable_stack_ensemble=False, enable_vote_ensemble=False)

    command_func = command(
        inputs=dict(
            automl_output=Input(type="mlflow_model")
        ),
        command="ls ${{inputs.automl_output}}",
        environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu:latest"
    )
    show_output = command_func(automl_output=classification_node.outputs.best_model)


pipeline_classification = automl_classification(
    classification_train_data=Input(path="./training-mltable-folder/", type="mltable"),
    classification_validation_data=Input(path="./validation-mltable-folder/", type="mltable"),
)

# ...
# Note that the above is only a snippet from the bankmarketing example you can find in our examples repo -> https://github.com/Azure/azureml-examples/tree/main/sdk/python/jobs/pipelines/1h_automl_in_pipeline/automl-classification-bankmarketing-in-pipeline

Дополнительные примеры включения AutoML в конвейеры см. в нашем репозитории примеров.

Дальнейшие действия