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