Конструирование признаков данных в автоматизированном машинном обучении

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

Сведения о параметрах конструирования признаков данных в Машинном обучении Azure и о настройке этих признаков для экспериментов с автоматизированным машинным обучением.

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

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

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

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

Необходимые компоненты

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

Важно!

Для выполнения команд Python из этой статьи требуется последняя версия пакета azureml-train-automl.

Сведения о настройке доступны в следующих статьях:

Настройка конструирования признаков

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

Примечание.

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

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

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

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

Автоматическое выделение признаков

В следующей таблице перечислены методы, автоматически применяемые к данным. Эти методы применяются к экспериментам, настроенным с помощью пакета SDK или пользовательского интерфейса студии. Чтобы отключить такую реакцию на событие, задайте "featurization": 'off' в объекте AutoMLConfig.

Примечание.

Если вы планируете экспортировать модели, созданные автоматизированным ML, в модель ONNX, следует учитывать, что в этом формате поддерживаются только параметры конструирования признаков, обозначенные звездочкой ("*"). Дополнительные сведения о преобразовании моделей в ONNX.

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

Для категориальных признаков значения можно аппроксимировать на основании наиболее часто встречающегося значения.
Создание дополнительных признаков* Для функций DateTime: Year, Month, Day, Day of week, Day of year, Quarter, Week of the Year, Hour, Minute, Second.

Для задач прогнозирования эти дополнительные признаки даты и времени создаются: год по ISO, полгода, календарный месяц в виде строки, неделя, день недели в виде строки, дня квартала, дня года, AM или PM (0, если до полудня (12 РМ), 1 в противном случае), AM или PM в виде строки, час дня (на основе 12 часов)

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

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

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

Масштабирование и обработка Description
StandardScaleWrapper Стандартизация признаков путем удаления среднего и масштабирования до вариантности единиц
MinMaxScalar Преобразование признаков путем масштабирования каждого признака по минимальному и максимальному значениям в столбце.
MaxAbsScaler Масштабирование каждого признака по максимальному абсолютному значению
RobustScalar Масштабирование признаков по диапазону квантилей
PCA Сокращение линейной размерности с помощью сингулярной декомпозиции данных для проецирования их в более низкое измерение
TruncatedSVDWrapper Этот преобразователь выполняет линейное уменьшение размерности с помощью усеченной сингулярной декомпозиции (SVD). В отличие от PCA, этот оценщик не выравнивает данные по центру перед вычислением сингулярной декомпозиции, что означает, что оно может эффективно работать с матрицами scipy.sparse.
SparseNormalizer Каждая выборка (т. е. каждая строка матрицы данных) с по крайней мере одним ненулевым компонентом масштабируется независимо от других выборок так, чтобы его нормы (L1 или L2) совпадали

Проверки данных

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

Проверки данных применяются:

  • Для экспериментов с пакетом SDK: при указании параметров "featurization": 'auto' или validation=auto в объекте AutoMLConfig.
  • Для экспериментов со студией: если включено автоматизированное конструирование признаков.

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

  • Путем установки show_output=True при отправке эксперимента с помощью пакета SDK.

  • В студии на вкладке Проверки данных автоматизированного машинного обучения.

Состояния проверки данных

Проверка данных может находиться в одном из трех состояний:

State Description
Пройдено Проблемы с данными не обнаружены, никаких действий от вас не требуется.
Готово К данным применены изменения. Рекомендуем вам ознакомиться с корректирующими действиями, которые были выполнены автоматизированным машинным обучением, для обеспечения соответствия изменений ожидаемым результатам.
Оповещено Обнаружена ошибка данных, но ее не удалось исправить. Мы рекомендуем вам ознакомиться с проблемой и устранить ее.

Поддерживаемые проверки данных

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

Проверка Состояние Условие для триггера
Отсутствующие значения признаков вменяют Прошло


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

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


Выполнено
Ваши входные данные проанализированы. Признаки высокой кратности не обнаружены.

Во входных данных были обнаружены и обработаны признаки высокой кратности.
Обработка разделения проверки Выполнено Для конфигурации проверки задано значение 'auto', а данные для обучения содержат менее 20 000 строк.
Каждая итерация обученной модели была проверена с помощью перекрестной проверки. Узнайте больше о данных для проверки.

Для конфигурации проверки задано значение 'auto', а данные для обучения содержат больше 20 000 строк.
Входные данные разделены на набор данных для обучения и набор данных для проверки, который используется для проверки модели.
Обнаружение балансировки классов Прошло



Предупредил


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

Во входных данных обнаружены несбалансированные классы. Чтобы устранить смещение модели, устраните проблему с балансировкой. Узнайте больше о несбалансированных данных.

Во входных данных обнаружены несбалансированные классы, и логика очистки определила, что следует применить балансировку.
Обнаружение проблем с памятью Прошло



Выполнено

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


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



Выполнено

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

Временные ряды проанализированы. Обнаружены точки данных, которые не согласуются с обнаруженной частотой. Эти точки данных удалены из набора данных.
Перекрестная проверка Выполнено Чтобы точно оценить модели, обученные AutoML, мы используем набор данных, на который модель не была обучена. Таким образом, если пользователь не предоставляет явный набор данных для проверки, используется часть набора данных для обучения. Для небольших наборов данных (менее 20 000 выборок) используется перекрестная проверка. В других случаях выделяется один набор данных для обучения и используется в качестве набора данных для проверки. Таким образом, для входных данных мы используем перекрестную проверку с 10 свертками, если количество примеров для обучения меньше 1000 и с 3 свертками во всех остальных случаях.
Разделение данных для обучения и тестирования Выполнено Чтобы точно оценить модели, обученные AutoML, мы используем набор данных, на который модель не была обучена. Таким образом, если пользователь не предоставляет явный набор данных для проверки, используется часть набора данных для обучения. Для небольших наборов данных (менее 20 000 выборок) используется перекрестная проверка. В других случаях выделяется один набор данных для обучения и используется в качестве набора данных для проверки. Таким образом, ваши входные данные были разделены на набор данных для обучения и набор контрольных данных для проверки.
Обнаружение идентификатора временного ряда Прошло



Фиксированный

Набор данных проанализирован. Дублирующиеся индексы времени не обнаружены.

В наборе данных обнаружено несколько временных рядов. Для вашего набора данных были автоматически созданы идентификаторы временных рядов.
Агрегирование временных рядов Прошло



Фиксированный

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

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



Фиксированный

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

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

Настройка конструирования признаков

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

Чтобы настроить конструирование признаков с помощью пакета SDK, укажите "featurization": FeaturizationConfig в объекте AutoMLConfig. Если вы используете для эксперимента Студию машинного обучения Azure, см. статью с инструкциями. Чтобы настроить конструирование признаков для типов задач прогнозирования, см. инструкции по прогнозированию.

Поддерживаемые настройки

Настройка Определение
Обновление назначения столбца Переопределение автоматически определенного типа признака для указанного столбца.
Обновление параметра преобразователя Обновление параметров для указанного преобразователя. В настоящее время поддерживаются Imputer (среднее, самое частое и медианное значения) и HashOneHotEncoder.
Удаление столбцов Указывает столбцы, которые следует исключить из конструирования признаков.
Блок-преобразователи Указывает блокирование преобразователей, используемых в процессе конструирования признаков.

Примечание.

Функциональность удаления столбцов является устаревшей начиная с версии 1.19 пакета SDK. Удаляйте столбцы из набора данных в ходе очистки данных до их использования в эксперименте автоматизированного ML.

Создайте объект FeaturizationConfig с помощью вызовов API:

featurization_config = FeaturizationConfig()
featurization_config.blocked_transformers = ['LabelEncoder']
featurization_config.drop_columns = ['aspiration', 'stroke']
featurization_config.add_column_purpose('engine-size', 'Numeric')
featurization_config.add_column_purpose('body-style', 'CategoricalHash')
#default strategy mean, add transformer param for 3 columns
featurization_config.add_transformer_params('Imputer', ['engine-size'], {"strategy": "median"})
featurization_config.add_transformer_params('Imputer', ['city-mpg'], {"strategy": "median"})
featurization_config.add_transformer_params('Imputer', ['bore'], {"strategy": "most_frequent"})
featurization_config.add_transformer_params('HashOneHotEncoder', [], {"number_of_bits": 3})

Прозрачность конструирования признаков

К каждой модели AutoML автоматически применяется конструирование признаков. Конструирование признаков включает автоматизированное проектирование признаков (при "featurization": 'auto') и масштабирование и нормализацию, которые затем влияют на выбранный алгоритм и значения его гиперпараметров. AutoML поддерживает различные методы, чтобы обеспечивать видимость того, что было применено к модели.

Рассмотрите этот пример прогнозирования:

  • Существует четыре входных признака: A (числовой), B (числовой), C (числовой), D (дата и время).
  • Числовой признак C удаляется, так как это столбец идентификаторов, все значения в котором уникальны.
  • Числовые признаки A и B имеют отсутствующие значения, которые заполняются средним значением.
  • Из признака D типа "дата и время" конструируется 11 различных признаков.

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

automl_config = AutoMLConfig(…)
automl_run = experiment.submit(automl_config …)
best_run, fitted_model = automl_run.get_output()

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

get_engineered_feature_names() возвращает список имен сконструированных признаков.

Примечание.

Используйте timeseriestransformer для задачи прогнозирования. Для задачи регрессии или классификации используйте datatransformer.

fitted_model.named_steps['timeseriestransformer']. get_engineered_feature_names ()

Этот список включает в себя имена всех сконструированных признаков.

['A', 'B', 'A_WASNULL', 'B_WASNULL', 'year', 'half', 'quarter', 'month', 'day', 'hour', 'am_pm', 'hour12', 'wday', 'qday', 'week']

get_featurization_summary() возвращает сводку сконструированных признаков по всем входным данным.

fitted_model.named_steps['timeseriestransformer'].get_featurization_summary()

Выходные данные

[{'RawFeatureName': 'A',
  'TypeDetected': 'Numeric',
  'Dropped': 'No',
  'EngineeredFeatureCount': 2,
  'Tranformations': ['MeanImputer', 'ImputationMarker']},
 {'RawFeatureName': 'B',
  'TypeDetected': 'Numeric',
  'Dropped': 'No',
  'EngineeredFeatureCount': 2,
  'Tranformations': ['MeanImputer', 'ImputationMarker']},
 {'RawFeatureName': 'C',
  'TypeDetected': 'Numeric',
  'Dropped': 'Yes',
  'EngineeredFeatureCount': 0,
  'Tranformations': []},
 {'RawFeatureName': 'D',
  'TypeDetected': 'DateTime',
  'Dropped': 'No',
  'EngineeredFeatureCount': 11,
  'Tranformations': ['DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime']}]
Выходные данные Определение
RawFeatureName Имя входного признака или столбца из предоставленного набора данных.
TypeDetected Распознанный тип данных входного признака.
Dropped Указывает, был ли входной признак удален или использован.
EngineeringFeatureCount Количество признаков, созданных с помощью преобразований в процессе автоматизированного конструирования признаков.
Преобразования Список преобразований, применяемых к входным признакам для создания сконструированных признаков.

Масштабирование и нормализация

Чтобы получить представление о масштабировании, нормализации и выбранном алгоритме со значениями его гиперпараметров, используйте fitted_model.steps.

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

[('RobustScaler', 
  RobustScaler(copy=True, 
  quantile_range=[10, 90], 
  with_centering=True, 
  with_scaling=True)), 

  ('LogisticRegression', 
  LogisticRegression(C=0.18420699693267145, class_weight='balanced', 
  dual=False, 
  fit_intercept=True, 
  intercept_scaling=1, 
  max_iter=100, 
  multi_class='multinomial', 
  n_jobs=1, penalty='l2', 
  random_state=None, 
  solver='newton-cg', 
  tol=0.0001, 
  verbose=0, 
  warm_start=False))

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

from pprint import pprint

def print_model(model, prefix=""):
    for step in model.steps:
        print(prefix + step[0])
        if hasattr(step[1], 'estimators') and hasattr(step[1], 'weights'):
            pprint({'estimators': list(e[0] for e in step[1].estimators), 'weights': step[1].weights})
            print()
            for estimator in step[1].estimators:
                print_model(estimator[1], estimator[0]+ ' - ')
        elif hasattr(step[1], '_base_learners') and hasattr(step[1], '_meta_learner'):
            print("\nMeta Learner")
            pprint(step[1]._meta_learner)
            print()
            for estimator in step[1]._base_learners:
                print_model(estimator[1], estimator[0]+ ' - ')
        else:
            pprint(step[1].get_params())
            print()   

Эта вспомогательная функция возвращает следующие выходные данные для конкретного запуска, используя LogisticRegression with RobustScalar в качестве конкретного алгоритма.

RobustScaler
{'copy': True,
'quantile_range': [10, 90],
'with_centering': True,
'with_scaling': True}

LogisticRegression
{'C': 0.18420699693267145,
'class_weight': 'balanced',
'dual': False,
'fit_intercept': True,
'intercept_scaling': 1,
'max_iter': 100,
'multi_class': 'multinomial',
'n_jobs': 1,
'penalty': 'l2',
'random_state': None,
'solver': 'newton-cg',
'tol': 0.0001,
'verbose': 0,
'warm_start': False}

Прогнозирование вероятности класса

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

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

best_run, fitted_model = automl_run.get_output()
class_prob = fitted_model.predict_proba(X_test)

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

Интеграция BERT в автоматизированное машинное обучение

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

Для BERT модель детально настроена и обучена с использованием меток, предоставленных пользователем. Отсюда внедренные документы выводятся в виде признаков наряду с другими признаками, такими как признаки на основе метки времени или день недели.

Сведения о том, как настроить эксперименты по обработке естественного языка (NLP), в которых также используется BERT с автоматизированным ML.

Действия для вызова BERT

Чтобы вызвать BERT, установите enable_dnn: True в automl_settings и используйте вычисления GPU (vm_size = "STANDARD_NC6" или более поздней версии). Если используется вычислительная среда ЦП, то вместо BERT AutoML включает характеризатор BiLSTM DNN.

Автоматизированное ML выполняет следующие действия для BERT.

  1. Предварительная обработка и разметка всех текстовых столбцов. Например, преобразователь "StringCast" можно найти в сводке по конструированию признаков модели. Пример создания сводки по конструированию признаков для модели можно найти в этой записной книжке.

  2. Объединение всех текстовых столбцов в один текстовый столбец, то есть в StringConcatTransformer в завершающей модели.

    В нашей реализации BERT общая длина текста учебной выборки ограничена 128 маркерами. Это означает, что все текстовые столбцы при объединении в идеале должны иметь длину не более 128 маркеров. Если имеется несколько столбцов, необходимо урезать каждый столбец, чтобы обеспечить соблюдение этого условия. В противном случае для сцепленных столбцов длинной >128 маркеров BERT на уровне маркера усекает эти входные данные до 128 маркеров.

  3. В рамках очистки признаков AutoML сравнивает BERT с базовыми показателями (набором признаков слов) для образца данных. Это сравнение определяет, обеспечит ли BERT повышение точности. Если результаты BERT лучше, чем базовые показатели, AutoML использует BERT для конструирования признаков текста для всех данных. В этом случае вы увидите PretrainedTextDNNTransformer в конечной модели.

Обычно BERT работает дольше, чем другие характеризаторы. Для повышения производительности рекомендуется использовать "STANDARD_NC24r" или "STANDARD_NC24rs_V3" для их возможностей RDMA.

AutoML будет распределять обучение BERT по нескольким узлам, если они доступны (максимум восемь узлов). Это можно сделать в объекте AutoMLConfig, задав для параметра max_concurrent_iterations значение выше 1.

Поддерживаемые языки для BERT в AutoML

В настоящее время AutoML поддерживает около 100 языков и в зависимости от языка набора данных выбирает соответствующую модель BERT. Для данных на немецком языке используется модель German BERT. Для данных на английском языке используется модель English BERT. Для всех других языков используется многоязыковая модель BERT.

В следующем коде активируется модель German BERT, так как для языка набора данных задано значение deu, трехбуквенный код немецкого языка по классификации ISO:

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='deu')

automl_settings = {
    "experiment_timeout_minutes": 120,
    "primary_metric": 'accuracy',
# All other settings you want to use
    "featurization": featurization_config,
    
    "enable_dnn": True, # This enables BERT DNN featurizer
    "enable_voting_ensemble": False,
    "enable_stack_ensemble": False
}

Следующие шаги