Поделиться через


Как работает Azure Databricks AutoML

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

Databricks AutoML выполняет следующие действия:

  1. Подготавливает набор данных для обучения модели. Например, AutoML выполняет обнаружение несбалансированных данных для проблем классификации до обучения модели.
  2. Выполняет итерацию для обучения и настройки нескольких моделей, где каждая модель создается из открытый код компонентов и может легко изменяться и интегрироваться в конвейеры машинного обучения.
    • AutoML автоматически распределяет пробные версии настройки гиперпараметров по рабочим узлам кластера.
    • При использовании Databricks Runtime 9.1 LTS ML или более поздней версии AutoML автоматически примерирует набор данных, если он слишком велик, чтобы поместиться в память одного рабочего узла. См. статью "Выборка больших наборов данных".
  3. Оценивает модели на основе алгоритмов из пакетов scikit-learn, xgboost, LightGBM, Prophet и ARIMA.
  4. Отображает результаты и предоставляет записную книжку Python с исходным кодом для каждого пробного запуска, чтобы вы могли просматривать, воспроизводить и изменять код. AutoML также рассчитывает сводные статистические данные по вашему набору данных и сохраняет эту информацию в записной книжке, которую вы можете просмотреть позже.

Алгоритмы AutoML

Databricks AutoML обучает и оценивает модели на основе алгоритмов в следующей таблице.

Примечание.

Для моделей классификации и регрессии дерево принятия решений, случайные леса, логистическая регрессия и линейная регрессия с алгоритмами градиентного градиента основаны на Scikit-learn.

Classification models (Модели классификации) Модели регрессии Модели прогнозирования
Деревья принятия решений Деревья принятия решений Prophet
Случайные леса Случайные леса Auto-ARIMA (доступно в Databricks Runtime 10.3 ML и более поздних версий).
Логистическая регрессия Линейная регрессия с использованием стохастического градиентного спуска
XGBoost XGBoost
LightGBM LightGBM

Поддерживаемые типы функций данных

Типы функций, не перечисленные ниже, не поддерживаются. Например, изображения не поддерживаются.

Поддерживаются следующие типы функций:

  • Числовые (ByteType, ShortType, IntegerType, LongType, FloatType и DoubleType)
  • Логический
  • Строковые (категориальные или текст на английском языке)
  • Метки времени (TimestampType, DateType)
  • ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML и более поздних версий)
  • DecimalType (Databricks Runtime 11.3 LTS ML и более поздней версии)

Разделение данных на наборы обучения, проверки и тестирования

Существует два метода для разделения данных на обучающие, проверяющие и тестовые наборы:

(По умолчанию) Случайное разделение: если стратегия разделения данных не указана, набор данных разбивается на обучать, проверять и тестовые наборы. Соотношение составляет 60 % разделения обучения, 20 % проверить разделение, 20 % тестового разделения. Это разделение выполняется случайным образом за кулисами. В случае задач классификации используется стратифицированное случайное разделение, чтобы обеспечить надлежащее представление каждого класса в наборах для обучения, проверки и тестирования.

Хронологическое разделение. В Databricks Runtime 10.4 LTS ML и более поздних версиях можно указать столбец времени, используемый для обучения, проверки и тестирования данных для проблем классификации и регрессии. Если задать этот столбец, набор данных будет разбит на наборы для обучения, проверки и тестирования по времени. Самые ранние точки используются для обучения, следующие по времени — для проверки, а самые последние точки используются в качестве набора данных для тестирования. Столбец времени может быть меткой времени, целым числом или строковым столбцом.

Выборка больших наборов данных

Примечание.

Выборка не применяется к задачам прогнозирования.

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

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

В Databricks Runtime 9.1 LTS ML через Databricks Runtime 10.4 LTS ML доля выборки не зависит от типа узла кластера или объема памяти на каждом узле.

В Databricks Runtime 11.x ML:

  • Доля выборки увеличивается для рабочих узлов с большим объемом памяти на каждое ядро. Можно увеличить размер выборки, выбрав тип экземпляра, оптимизированный для операций в памяти.
  • Вы можете дополнительно увеличить размер выборки, выбрав увеличенное значение для spark.task.cpus в конфигурации Spark для кластера. Значение по умолчанию — 1. Максимальное значение — это число ЦП в рабочем узле. При увеличении этого значения размер выборки будет увеличен, но параллельно будет выполняться меньше пробных запусков. Например, на компьютере с 4 ядрами и 64 ГБ общей ОЗУ по умолчанию spark.task.cpus=1 выполняет 4 пробных запуска в каждой рабочей роли, при этом каждый пробный запуск ограничен 16 ГБ ОЗУ. Если задать spark.task.cpus=4, каждая рабочая роль выполняет только один пробный запуск, но он может использовать 64 ГБ ОЗУ.

В Databricks Runtime 12.2 LTS ML и более поздних версиях AutoML может обучать большие наборы данных, распределив больше ядер ЦП на задачу обучения. Вы можете увеличить размер выборки, выбрав размер экземпляра с большей общей памятью.

В Databricks Runtime 11.3 LTS ML и более поздних версиях, если AutoML образец набора данных, доля выборки отображается на вкладке "Обзор " в пользовательском интерфейсе.

Для задач классификации AutoML использует sampleByметод PySpark для стратифицированной выборки, чтобы сохранить целевое распределение меток.

Для задач регрессии AutoML использует sampleметод PySpark.

Поддержка несбалансированного набора данных для проблем классификации

В Databricks Runtime 11.3 LTS ML и более поздних версиях, если AutoML обнаруживает, что набор данных несбалансирован, он пытается уменьшить дисбаланс набора обучающих данных путем снижения уровня основных классов и добавления весов класса. AutoML балансирует только обучающий набор данных и не балансирует наборы данных тестирования и проверки. Это гарантирует, что производительность модели всегда оценивается в необогащенном наборе данных с истинным распределением входных классов.

Чтобы сбалансировать несбалансированный набор данных для обучения, AutoML использует весы классов, которые обратно связаны с степенью уменьшения нагрузки заданного класса. Например, если набор данных для обучения с 100 выборками содержит 95 выборок, принадлежащих к классу A и 5 выборкам, принадлежащим классу B, AutoML уменьшает этот дисбаланс путем уменьшения числа выборок класса A до 70 выборок, то есть понижение уровня A на 70/95 или 0,736, сохраняя количество выборок в классе B на 5. Чтобы убедиться, что окончательная модель правильно откалибрирована и распределение вероятностей выходных данных модели совпадает с входными данными, AutoML масштабирует вес класса A по соотношению 1/0,736 или 1,358, сохраняя вес класса B как 1. Затем AutoML использует эти весы классов в обучении моделей в качестве параметра, чтобы убедиться, что выборки из каждого класса взвешиваются соответствующим образом при обучении модели.

Обнаружение семантического типа

Примечание.

В Databricks Runtime 9.1 LTS ML и более поздних версий AutoML пытается обнаружить, имеют ли столбцы семантический тип, отличный от типа данных Spark или pandas в схеме таблицы. AutoML обрабатывает эти столбцы как обнаруженный семантический тип. Эти обнаружения являются оптимальными, но в некоторых случаях могут пропускать существование семантических типов. Можно также вручную задать семантический тип столбца или указать AutoML не применять обнаружение семантических типов к столбцу с помощью заметок.

В частности, AutoML выполняет приведенные ниже корректировки.

  • Строковые и целочисленные столбцы, представляющие данные даты или меток времени, обрабатываются как тип метки времени.
  • Строковые столбцы, представляющие числовые данные, обрабатываются как числовой тип.

В Databricks Runtime 10.1 ML и более поздних версий AutoML также выполняет указанные ниже корректировки.

  • Числовые столбцы, содержащие идентификаторы категорий, обрабатываются как категориальный признак.
  • Строковые столбцы, содержащие английский текст, рассматриваются как текстовые признаки.

Заметки семантического типа

В Databricks Runtime 10.1 ML и более поздних версий можно вручную управлять назначенным семантическим типом, размещая заметку семантического типа для столбца. Чтобы вручную добавить заметку семантического типа к столбцу <column-name> как <semantic-type>, используйте следующий синтаксис.

metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)

<semantic-type> может принимать следующие значения:

  • categorical: столбец содержит категориальные значения (например, числовые значения, которые должны рассматриваться как идентификаторы).
  • numeric: столбец содержит числовые значения (например, строковые значения, которые можно преобразовать в числа).
  • datetime: столбец содержит значения меток времени (строковые, числовые значения или значения даты, которые можно преобразовать в метки времени).
  • text: строковый столбец содержит текст на английском языке.

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

Значения Шепли (SHAP) для объяснимости модели

Примечание.

Для MLR 11.1 и ниже диаграммы SHAP не создаются, если набор данных содержит datetime столбец.

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

Записные книжки AutoML используют для вычисления значений Шепли пакет SHAP. Так как эти вычисления очень интенсивно используют память, по умолчанию они не выполняются.

Чтобы вычислить и отобразить значения Шепли, выполните следующие действия.

  1. Перейдите к разделу Feature importance (Важность компонентов) в созданной AutoML пробной записной книжке.
  2. Задайте shap_enabled = True.
  3. Повторно запустите эту записную книжку.

Агрегирование временных рядов

Для задач прогнозирования, когда во временном ряду имеется несколько значений временной метки, AutoML использует среднее значение.

Чтобы использовать вместо этого сумму, измените записную книжку исходного кода. В ячейке Агрегировать данные по… измените .agg(y=(target_col, "avg")) на .agg(y=(target_col, "sum")), как показано ниже.

group_cols = [time_col] + id_cols
df_aggregation = df_loaded \
  .groupby(group_cols) \
  .agg(y=(target_col, "sum")) \
  .reset_index() \
  .rename(columns={ time_col : "ds" })

Интеграция с Хранилищем компонентов

С помощью Databricks Runtime 11.3 LTS ML и более поздних версий можно использовать существующие таблицы функций в Магазине компонентов для расширения исходного входного набора данных для проблем классификации и регрессии.

С помощью Databricks Runtime 12.2 LTS ML и более поздних версий можно использовать существующие таблицы функций в Магазине компонентов для расширения исходного входного набора данных для всех проблем AutoML: классификации, регрессии и прогнозирования.

Сведения о создании таблицы компонентов см. в разделе "Что такое хранилище компонентов?".

Чтобы использовать существующие таблицы компонентов, можно выбрать таблицы компонентов с пользовательским интерфейсом AutoML или задать feature_store_lookups параметр в спецификации запуска AutoML.

feature_store_lookups = [
  {
     "table_name": "example.trip_pickup_features",
     "lookup_key": ["pickup_zip", "rounded_pickup_datetime"],
  },
  {
      "table_name": "example.trip_dropoff_features",
     "lookup_key": ["dropoff_zip", "rounded_dropoff_datetime"],
  }
]

Создание пробной записной книжки

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

Для экспериментов классификации и регрессии автоматически импортируются в рабочую область автоматически созданные записные книжки AutoML для изучения данных и лучшей пробной версии эксперимента. Созданные записные книжки для других пробных версий экспериментов сохраняются в виде артефактов MLflow в DBFS, а не автоматически импортированных в рабочую область. Для всех пробных версий, кроме лучшей пробной версии, notebook_path не заданы и notebook_url в TrialInfo API Python. Если вам нужно использовать эти записные книжки, их можно импортировать вручную в рабочую область с помощью пользовательского интерфейса эксперимента AutoML или databricks.automl.import_notebookAPI Python.

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

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

Пример записной книжки: эксперимент AutoML с Хранилищем компонентов

В следующей записной книжке показано, как обучить модель машинного обучения с помощью таблиц функций AutoML и Feature Store.

Эксперимент AutoML с примером записной книжки в Магазине компонентов

Получить записную книжку