Конструирование признаков данных в автоматизированном машинном обучении
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
В этой статье объясняется, как настроить параметры признаков данных в Машинное обучение Azure для экспериментов автоматического машинного обучения (AutoML).
Проектирование и конструирование признаков
Данные для обучения состоят из строк и столбцов. Каждая строка представляет собой наблюдение или запись, а столбцы каждой строки — это признаки, описывающие каждую запись. Как правило, для создания прогнозных моделей выбираются признаки, которые лучше всего характеризуют закономерности в данных.
Хотя многие необработанные поля данных можно использовать непосредственно для обучения модели, часто необходимо создавать другие (инженерные) функции, предоставляющие информацию, которая лучше отличает шаблоны в данных. Этот процесс называется проектированием признаков, где использование знаний о домене данных используется для создания функций, которые, в свою очередь, помогают алгоритмам машинного обучения лучше учиться.
В машинном обучении Azure методики масштабирования и нормализации данных применяются для упрощения проектирования признаков. В совокупности эти методы и эта инженерия функций называются признаками в экспериментах автоматизированного машинного обучения (ML).
Необходимые компоненты
В этой статье предполагается, что вы уже знаете, как настраивать эксперимент с автоматизированным машинным обучением.
Внимание
Для выполнения команд Python из этой статьи требуется последняя версия пакета azureml-train-automl
.
- Установите последнюю версию пакета
azureml-train-automl
в локальной среде. - Сведения о последней версии пакета
azureml-train-automl
см. в заметках о выпуске.
Сведения о настройке доступны в следующих статьях:
- Для первого кода: настройка обучения AutoML с помощью Python
- Для интерфейса без кода: настройка обучения 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 | Уменьшение линейной размерности с помощью декомпозиции сингулярного значения данных для проецирования его в нижнее размерное пространство. |
УсечениеSVD | Этот преобразователь выполняет линейное уменьшение размерности с помощью усеченного сингулярного декомпозиции (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',ateTime','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 модель детально настроена и обучена с использованием меток, предоставленных пользователем. Отсюда внедренные документы выводятся в виде признаков наряду с другими признаками, такими как признаки на основе метки времени или день недели.
Узнайте, как настроить AutoML для обучения модели обработки естественного языка с помощью Python.
Действия для вызова BERT
Чтобы вызвать BERT, установите enable_dnn: True
в automl_settings и используйте вычисления GPU (vm_size = "STANDARD_NC6"
или более поздней версии). Если используется вычислительная среда ЦП, то вместо BERT AutoML включает характеризатор BiLSTM DNN.
Автоматизированное ML выполняет следующие действия для BERT.
Предварительная обработка и разметка всех текстовых столбцов. Например, преобразователь
StringCast
можно найти в сводке признаков конечной модели. Пример создания сводки по конструированию признаков для модели можно найти в этой записной книжке.Объединение всех текстовых столбцов в один текстовый столбец, то есть в
StringConcatTransformer
в завершающей модели.В нашей реализации BERT общая длина текста учебной выборки ограничена 128 маркерами. Это означает, что все текстовые столбцы при объединении в идеале должны иметь длину не более 128 маркеров. Если имеется несколько столбцов, необходимо урезать каждый столбец, чтобы обеспечить соблюдение этого условия. В противном случае для сцепленных столбцов длинной >128 маркеров BERT на уровне маркера усекает эти входные данные до 128 маркеров.
В рамках очистки признаков 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
}