Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: SDK для Python azureml v1
Важно!
В этой статье содержатся сведения об использовании пакета SDK машинного обучения Azure версии 1. Пакет SDK версии 1 не рекомендуется использовать 31 марта 2025 г. и поддержка этого пакета завершится 30 июня 2026 г. Вы можете установить и использовать пакет SDK версии 1 до этой даты.
Рекомендуется перейти на пакет SDK версии 2 до 30 июня 2026 г. Дополнительные сведения о пакете SDK версии 2 см. в статье "Что такое пакет SDK для Python для Машинного обучения Azure версии 2 " и справочник по пакету SDK версии 2.
В этой статье объясняется, как настроить параметры обработки признаков данных в Azure Machine Learning для экспериментов автоматического машинного обучения (AutoML).
Данные для обучения состоят из строк и столбцов. Каждая строка представляет собой наблюдение или запись, а столбцы каждой строки — это признаки, описывающие каждую запись. Как правило, для создания прогнозных моделей выбираются признаки, которые лучше всего характеризуют закономерности в данных.
Хотя многие необработанные поля данных можно использовать непосредственно для обучения модели, часто необходимо создать другие (инженерные) функции, которые предоставляют информацию для более эффективной дифференцировки шаблонов в данных. Этот процесс называется инженерией признаков, где использование предметных знаний о данных используется для создания признаков, которые помогают алгоритмам машинного обучения более эффективно обучаться.
В машинном обучении Azure методики масштабирования и нормализации данных применяются для упрощения проектирования признаков. В совокупности эти методы и создание характеристик называются феатуризацией в экспериментах AutoML.
В этой статье предполагается, что вы уже знаете, как настроить эксперимент AutoML.
Важно!
Для выполнения команд Python из этой статьи требуется последняя версия пакета azureml-train-automl
.
-
Установите последнюю версию пакета
azureml-train-automl
в локальной среде. - Сведения о последней версии пакета
azureml-train-automl
см. в заметках о выпуске.
Сведения о настройке доступны в следующих статьях:
- Опыт программирования: настройте обучение AutoML с помощью Python
- Для интерфейса без кода: настройка обучения AutoML без кода для табличных данных с помощью пользовательского интерфейса студии
В каждом эксперименте AutoML методы автоматического масштабирования и нормализации применяются к данным по умолчанию. Эти методы являются разновидностями конструирования характеристик, которые помогают некоторым алгоритмам, чувствительным к характеристикам на различных масштабах. Можно включить больше фичеризации, такие как заполнение отсутствующих значений, кодирование и преобразования данных.
Примечание
Шаги по включению признаков AutoML (например, нормализация функций, обработка отсутствующих данных или преобразование текста в числовые) становятся частью базовой модели. При использовании модели для прогнозирования, те же этапы обработки признаков, которые выполнялись во время обучения, автоматически выполняются для входных данных.
Для экспериментов, настроенных с помощью пакета SDK для Python, можно включить или отключить параметр конструирования признаков, а затем указать шаги конструирования признаков, которые будут использоваться в эксперименте. Если вы используете Студию машинного обучения Azure, ознакомьтесь с шагами включения признакового моделирования.
В приведенной ниже таблице показаны допустимые параметры для featurization
в классе AutoMLConfig.
Конфигурация построения признаков | Описание |
---|---|
"featurization": 'auto' |
Указывает, что в рамках предварительной обработки ограничения на данные и этапы фичеризации выполняются автоматически. Это параметр по умолчанию. |
"featurization": 'off' |
Указывает, что этапы фичеризации не выполняются автоматически. |
"featurization": 'FeaturizationConfig' |
Указывает, что необходимо использовать настраиваемые шаги конструирования признаков. Дополнительные сведения см. в разделе Настройка признаков. |
В следующей таблице перечислены методы, автоматически применяемые к данным. Эти методы применяются к экспериментам, настроенным с помощью пакета SDK или пользовательского интерфейса студии. Чтобы отключить такую реакцию на событие, задайте "featurization": 'off'
в объекте AutoMLConfig
.
Шаги создания признаков | Описание |
---|---|
Удалите признаки с высокой кардинальностью или отсутствием изменчивости* | Удалите эти признаки из наборов для обучения и проверки. Эта функция применяется к признакам без значений, с одинаковыми значениями во всех строках или с высокой кардинальностью (например, хэши, идентификаторы или уникальные идентификаторы). |
Аппроксимация отсутствующих значений* | Для числовых признаков можно аппроксимировать значения на основании среднего значения в столбце. Для категориальных признаков замещайте наиболее часто встречающимся значением. |
Создайте больше функций* | Для функций DateTime : год, месяц, день, день недели, день года, квартал, неделя года, час, минута, вторая. Для задач прогнозирования создаются следующие дополнительные функции DateTime: ISO-год, полугодие, календарный месяц в виде строки, неделя, день недели в виде строки, день квартала, день года, AM/PM (0 для утра, 1 для вечера), AM/PM как строка, час дня (в 12-часовом формате). Для характеристик текста: частота терминов на основе униграмм, биграмов и триграмм. Дополнительные сведения см. в статье об интеграции BERT. |
Преобразование и кодирование* | Преобразование числовых функций, которые имеют несколько уникальных значений, в функции категорий. Однократная кодировка используется для категориальных признаков низкой кратности. Однохешная кодировка используется для категориальных признаков высокой кратности. |
Внедрение Word | Векторизатор текста преобразует векторы текстовых токенов в векторы предложений с помощью предварительно обученной модели. Векторы внедрения каждого слова в документе агрегируются со всеми остальными, чтобы создать вектор признаков документа. |
Расстояние кластера | Обучает модель кластеризации методом k-средних по всем числовым столбцам. Выводит k новых признаков (по одному числовому признаку на кластер), содержащих расстояние от каждой выборки до центроида каждого кластера. |
Примечание
*Если вы планируете экспортировать модели, созданные AutoML, в модель ONNX, только опции обработки признаков, отмеченные звездочкой, поддерживаются в формате ONNX. Дополнительные сведения см. в статье "Создание прогнозов с помощью модели AutoML ONNX".
В каждом эксперименте AutoML данные автоматически масштабируются или нормализуются, чтобы помочь алгоритмам хорошо работать. Во время обучения модели для каждой модели применяется один из следующих методов масштабирования или нормализации.
Масштабирование и обработка | Описание |
---|---|
StandardScaler | Стандартизирует признаки, удаляя среднее значение и масштабируя до единичной дисперсии. |
MinMaxScaler | Преобразует функции путем масштабирования каждой функции по минимальному и максимальному значению этого столбца. |
MaxAbsScaler | Масштабирует каждую функцию по максимальному абсолютному значению. |
RobustScaler | Масштабирует функции по их диапазону квантилей. |
PCA | Анализ основных компонентов. Уменьшение линейной размерности с помощью декомпозиции сингулярного значения данных для проецирования его в нижнее размерное пространство. |
Троянское SVD | Этот преобразователь выполняет линейное уменьшение размерности с помощью усечённого сингулярного разложения (SVD). В отличие от PCA, этот оценщик не центрирует данные перед вычислением разложения сингулярных значений, что означает, что он может эффективно работать с scipy.sparse матрицами. |
Нормализатор | Каждый пример (то есть каждая строка матрицы данных) с по крайней мере одним ненулевом компонентом перемасштабируется независимо от других выборок, чтобы его норма (l1 или l2) равнялась одному. |
Средства защиты данных помогают выявлять потенциальные проблемы с данными, например отсутствующие значения или несбалансированные данные. Они также помогают выполнять корректирующие действия для улучшения результатов.
Меры по обеспечению безопасности данных применяются:
-
Для экспериментов пакета SDK: если параметры
"featurization": 'auto'
илиvalidation=auto
указаны в объектеAutoMLConfig
. - Для студийных экспериментов: когда включена автоматическая обработка признаков.
Вы можете проверить ограничения данных для своего эксперимента.
- Путем установки
show_output=True
при отправке эксперимента с помощью пакета SDK. - В студии на вкладке Ограничения данных во время запуска AutoML.
Проверка данных может находиться в одном из трех состояний:
состояние | Описание |
---|---|
Пройдено | Проблемы с данными не обнаружены, никаких действий от вас не требуется. |
Готово | К данным применены изменения. Рекомендуем вам ознакомиться с корректирующими действиями, которые были выполнены автоматизированным машинным обучением, для обеспечения соответствия изменений ожидаемым результатам. |
Оповещено | Обнаружена ошибка данных, но ее не удалось исправить. Мы призываем вас пересмотреть и устранить проблему. |
В следующей таблице описаны поддерживаемые в настоящее время ограничения данных и связанные с ними состояния, которые могут наблюдаться при отправке эксперимента.
Проверка | Состояние | Условие для триггера |
---|---|---|
Отсутствующие значения признаков вменяют | Пройденный Выполнено |
В данных для обучения не обнаружено ни одного отсутствующего значения признака. Дополнительные сведения см. в разделе "Настройка параметров признаков". В данных для обучения обнаружены отсутствующее данные, которые были аппроксимированы. |
Обнаружение компонентов с большим количеством элементов | Пройденный Выполнено |
Ваши входные данные проанализированы. Признаки высокой кратности не обнаружены. Во входных данных были обнаружены признаки высокой уникальности и обработаны. |
Обработка разделения данных для проверки | Выполнено | Для конфигурации проверки задано значение 'auto' , а данные для обучения содержат менее 20 000 строк. Каждая итерация обученной модели была проверена с помощью перекрестной проверки. Узнайте больше о данных для проверки. Для конфигурации проверки задано значение 'auto' , а данные для обучения содержат больше 20 000 строк. Входные данные разделены на набор данных для обучения и набор данных для проверки, который используется для проверки модели. |
Обнаружение балансировки классов | Пройденный Оповещён Выполнено |
Входные данные проанализированы. Все классы в данных для обучения сбалансированы. Набор данных считается сбалансированным, если каждый класс хорошо представлен в наборе данных (оценивается по числу выборок и их соотношению). Во входных данных обнаружены несбалансированные классы. Чтобы устранить смещение модели, устраните проблему с балансировкой. Узнайте больше о несбалансированных данных. Во входных данных обнаружены несбалансированные классы, и логика уравновешивания определила, что необходимо применить балансировку. |
Обнаружение проблем с памятью | Пройденный Выполнено |
Проанализированы выбранные значения (горизонт, задержка и скользящее окно). Потенциальные проблемы нехватки памяти не обнаружены. Узнайте больше о конфигурациях прогнозов для временных рядов. Выбранные значения (горизонт, задержка, скользящее окно) проанализированы. Установлено, что они потенциально могут привести к нехватке памяти для эксперимента. Конфигурации задержки или скользящего окна отключены. |
Обнаружение частоты | Пройденный Выполнено |
Временные ряды проанализированы. Все точки данных согласованы с обнаруженной частотой. Временные ряды проанализированы. Обнаружены точки данных, которые не согласуются с обнаруженной частотой. Эти точки данных удалены из набора данных. |
Перекрестная проверка | Выполнено | Чтобы точно оценить модель, обученную autoML, мы используем набор данных, на который модель не обучена. Таким образом, если пользователь не предоставляет явный набор данных для проверки, для этого используется часть набора данных для обучения. Для небольших наборов данных (менее 20 000 образцов) используется перекрестная проверка, а в противном случае один отложенный набор выделяется из обучающих данных для использования в качестве набора для проверки. Таким образом, для входных данных мы используем перекрестную проверку с 10 частей, если количество образцов для обучения меньше 1000, и 3 части, во всех остальных случаях. |
Разделение данных на обучающую и тестовую выборки | Выполнено | Чтобы точно оценить модель, обученную autoML, мы используем набор данных, на который модель не обучена. Таким образом, если пользователь не предоставляет явный набор данных для проверки, для этого используется часть набора данных для обучения. Для небольших наборов данных (менее 20 000 образцов) используется перекрестная проверка, а в противном случае один отложенный набор выделяется из обучающих данных для использования в качестве набора для проверки. Таким образом, входные данные разделены на обучающий набор данных и контрольный набор данных для проверки. |
Обнаружение идентификатора временных рядов | Пройденный Исправлено |
Набор данных проанализирован. Дублирующиеся индексы времени не обнаружены. В наборе данных обнаружено несколько временных рядов. Для вашего набора данных были автоматически созданы идентификаторы временных рядов. |
Агрегирование временных рядов | Пройденный Исправлено |
Частота набора данных соответствует заданной пользователем частоте. Статистическая обработка не выполнялась. Данные были агрегированы в соответствии с частотой, указанной пользователем. |
Обработка коротких серий | Пройденный Исправлено |
AutoML обнаружил достаточно точек данных для каждой серии входных данных, чтобы продолжить обучение. AutoML обнаружил, что некоторые серии не содержали достаточно точек данных для обучения модели. Чтобы продолжить обучение, эти короткие серии были исключены или дополнены. |
Вы можете настроить параметры признаков, чтобы гарантировать, что данные и функции, используемые для обучения модели машинного обучения, приводят к соответствующим прогнозам.
Чтобы настроить конструирование признаков с помощью пакета SDK, укажите "featurization": FeaturizationConfig
в объекте AutoMLConfig
. Если вы используете студию машинного обучения Azure для эксперимента, ознакомьтесь с параметрами настройки признаков. Сведения о настройке признаков для типов задач прогнозирования см. в разделе "Настройка признаков".
Поддерживаемые настройки
Настройка | Определение |
---|---|
Обновление назначения столбца | Переопределение автоматически определенного типа признака для указанного столбца. |
Обновление параметра преобразователя | Обновление параметров для указанного преобразователя. В настоящее время поддерживаются Imputer (среднее, самое частое и медианное значения) и HashOneHotEncoder. |
Удаление столбцов* | Указывает столбцы, которые следует исключить из преобразования в признаки. |
Блок-преобразователи | Указывает блочные преобразователи, используемые в процессе фичеризации. |
Примечание
*Функция удаления столбцов не рекомендуется использовать в пакете SDK версии 1.19. Удалите столбцы из набора данных в рамках очистки данных, прежде чем использовать его в эксперименте AutoML.
Объект можно создать 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.
automl_config = AutoMLConfig(…)
automl_run = experiment.submit(automl_config …)
best_run, fitted_model = automl_run.get_output()
get_engineered_feature_names()
возвращает список имен сконструированных функций.
Примечание
Используется 'timeseriestransformer'
для task='forecasting'
, в противном случае используется 'datatransformer'
для 'regression'
или 'classification'
задачи.
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']}]
Выходные данные | Определение |
---|---|
Название необработанной функции | Имя входного признака или столбца из предоставленного набора данных. |
ТипОбнаружен | Распознанный тип данных входной характеристики. |
Упал | Указывает, был ли входной признак удален или использован. |
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}
Модели, созданные с помощью AutoML, имеют объекты-оболочки, которые повторяют функциональность их классa-источника с открытым исходным кодом. Большинство объектов оболочки модели классификации, возвращаемых AutoML, реализуют функцию predict_proba()
, которая принимает данные в виде массива или разреженной матрицы ваших признаков (значения 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) используются в слое признаков AutoML. В этом слое, если столбец содержит произвольный текст или другие типы данных, например метки времени или простые числа, извлечение признаков применяется соответствующим образом.
Для BERT модель настраивается и обучена, используя предоставленные пользователем метки. Отсюда встраивания документов выводятся в виде характеристик вместе с другими, такими как характеристики на основе временной метки или дней недели.
Узнайте, как настроить AutoML для обучения модели обработки естественного языка с помощью Python.
Чтобы вызвать BERT, установите enable_dnn: True
, а в automl_settings
используйте вычислительные ресурсы GPU (vm_size = "STANDARD_NC6"
или более мощный GPU). Если используется вычислительная среда ЦП, то вместо BERT AutoML включает характеризатор BiLSTM DNN.
AutoML выполняет следующие действия для BERT.
Предварительно обрабатывает и токенизирует все текстовые столбцы. Например, преобразователь
StringCast
можно найти в сводке признаков конечной модели. Пример создания сводки характеристик модели можно найти в этой записной книжке Jupyter.Объединяет все текстовые столбцы в один текстовый столбец, следовательно,
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.
В настоящее время AutoML поддерживает около 100 языков. В зависимости от языка набора данных AutoML выбирает соответствующую модель BERT. Для данных на немецком языке используется модель German BERT. Для английского языка мы используем языковую модель English BERT. Для всех других языков используется многоязыковая модель BERT.
В следующем коде активируется немецкая модель BERT, так как язык набора данных указан в deu
, где 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
}