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

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

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

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

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

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

Предварительные требования

Для работы с этой статьей вам потребуется:

Важно!

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

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

Используйте объект AutoMLConfig для определения параметров эксперимента и обучения. В следующем фрагменте кода обратите внимание, что определены только обязательные параметры, которые являются параметрами для n_cross_validations или validation_dataне включены.

Примечание

Сценарии прогнозирования не поддерживают разделение данных по умолчанию и перекрестную проверку.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             label_column_name = 'Class'
                            )

Если параметр validation_data или n_cross_validations не задан явно, автоматический алгоритм ML применяет методы по умолчанию в зависимости от числа строк, предоставленных в одном наборе данных training_data.

Объем данных обучения Метод проверки
Более 20 000 строк Применяется разбиение данных по обучению и проверке. Значение по умолчанию — использовать 10 % начального набора данных для обучения в качестве набора проверки. В свою очередь, этот набор проверки используется для вычисления метрик.
Менее 20 000 строк Применяется подход перекрестной проверки. Стандартное количество сверток зависит от числа строк.
Если набор данных содержит менее 1000 строк, то используется 10 сверток.
Если число строк от 1000 до 20 000, то используются три свертки.

Предоставление данных проверки

В этом случае можно начать с одного файла данных и разделить его на обучающие данные и наборы данных проверки. Кроме того, можно указать отдельный файл данных для набора проверки. В любом случае параметр validation_data в объектеAutoMLConfig назначает, какие данные следует использовать в качестве набора проверки. Этот параметр принимает только наборы данных в форме набор данных машинного обучения Azure или инфраструктура данных Pandas.

Примечание

Для параметра validation_data также нужно задать параметры training_data и label_column_name. Вы можете задать только один параметр проверки, то есть указать или validation_data, или n_cross_validations.

В следующем примере кода явно определяется, какая часть предоставленных данных в dataset используется для обучения и проверки.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

training_data, validation_data = dataset.random_split(percentage=0.8, seed=1)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = training_data,
                             validation_data = validation_data,
                             label_column_name = 'Class'
                            )

Задать размер набора проверки

В этом случае для эксперимента предоставляется только один набор данных. То есть параметр validation_dataне указан, а предоставленный набор данных присваивается параметру training_data.

В объекте AutoMLConfig можно задать параметр validation_size для удержания части обучающих данных для проверки. Это означает, что набор проверки будет разделяться автоматическим ML из предоставленного начального значения training_data. Это значение должно находиться в диапазоне от 0,0 до 1,0, не включительно (например, 0,2 означает, что 20 % данных будут храниться для данных проверки).

Примечание

Параметр validation_size не поддерживается в сценариях предсказания.

См. следующий пример кода.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             validation_size = 0.2,
                             label_column_name = 'Class'
                            )

Перекрестная проверка K раз

Чтобы выполнить перекрестную проверку с помощью k-сгиба, включите параметрn_cross_validations и присвойте ему значение. Этот параметр задает количество выполняемых перекрестных проверок на основе того же числа сверток.

Примечание

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

В следующем коде определяется пять сверток для перекрестной проверки. Таким образом, пять различных курсов обучения, каждое обучение с использованием 4/5 данных и каждая проверка с использованием 1/5 данных с разными контрольными данными каждый раз.

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

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             n_cross_validations = 5
                             label_column_name = 'Class'
                            )

Перекрестная проверка Монте-Карло

Чтобы выполнить перекрестную проверку Монте-Карло, включите оба параметра validation_size иn_cross_validations в объект AutoMLConfig.

Для перекрестной проверки Монте-Карло автоматически ML записывает часть обучающих данных, указанных в validation_size параметре, для проверки, а затем назначит остальные данные для обучения. Затем этот процесс повторяется в зависимости от значения, указанного в параметреn_cross_validations; в результате каждый раз в случайном порядке создаются новые разбиения на обучение и проверку.

Примечание

Перекрестная проверка Монте-Карло не поддерживается в сценариях прогнозирования.

Следующий код определяет, что 7 сверток для перекрестной проверки и 20 % обучающих данных должны использоваться для проверки. Таким образом, 7 различных курсов обучения; каждое обучение использует 80 % данных, и каждая проверка использует 20 % данных с разными контрольными данными.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             n_cross_validations = 7
                             validation_size = 0.2,
                             label_column_name = 'Class'
                            )

Выбор нестандартных данных для перекрестной проверки

Вы также можете предоставить собственные данные перекрестной проверки (ОПС). Это считается более сложным сценарием, поскольку вы указываете, какие столбцы следует разделить и использовать для проверки. Включите настраиваемые столбцы с разделением КП в обучающие данные и укажите столбцы, заполнив имена столбцов в параметре cv_split_column_names. Каждый столбец представляет одну разбивку перекрестной проверки и заполняется целыми значениями 1 или 0, где 1 означает, что строка должна использоваться для обучения, а значение 0 указывает, что строка должна использоваться для проверки.

Примечание

Параметр cv_split_column_names не поддерживается в сценариях предсказания.

В следующем фрагменте кода содержатся данные по банковскому маркетингу с двумя столбцами "cv1" и "cv2".

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/bankmarketing_with_cv.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             label_column_name = 'y',
                             cv_split_column_names = ['cv1', 'cv2']
                            )

Примечание

Чтобы использовать cv_split_column_names с training_data и label_column_name, обновите пакет SDK для машинное обучение Azure Python версии 1.6.0 или более поздней. Сведения о предыдущих версиях пакета SDK см. в разделе Использование cv_splits_indices, но обратите внимание, что он используется только с входными данными набора данных X и y.

Вычисление метрик для перекрестной проверки в машинном обучении

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

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

Предоставление проверочных данных (предварительная версия)

Важно!

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

Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.

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

Проверочные наборы данных должны быть представлены в виде табличного набора данных Машинного обучения Azure. Проверочный набор данных можно указать с помощью параметров test_data и test_size в AutoMLConfig объекте. Эти параметры являются взаимоисключающими и не могут быть указаны одновременно или с помощью cv_split_column_names или cv_splits_indices.

С помощью параметра test_data укажите существующий набор данных для передачи в AutoMLConfig объект.

automl_config = AutoMLConfig(task='forecasting',
                             ...
                             # Provide an existing test dataset
                             test_data=test_dataset,
                             ...
                             forecasting_parameters=forecasting_parameters)

Чтобы использовать разделение данных для обучения/тестирования вместо непосредственного предоставления проверочных данных, необходимо использовать test_size параметр при создании AutoMLConfig. Этот параметр должен иметь значение с плавающей запятой в диапазоне от 0,0 до 1,0 не включительно и отражать долю обучающих данных в процентах, которые следует использовать для проверочного набора данных.

automl_config = AutoMLConfig(task = 'regression',
                             ...
                             # Specify train/test split
                             training_data=training_data,
                             test_size=0.2)

Примечание

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

При передаче параметров test_data или test_size в AutoMLConfig удаленный тестовый запуск автоматически активируется после завершения эксперимента. Проверочные данные, предоставленные для тестового запуска, используются для оценки наилучшей модели, рекомендованной автоматическим ML. Узнайте больше о получении прогнозов из тестового запуска.

Дальнейшие действия