Partilhar via


Configurar dados de treinamento, validação, validação cruzada e teste em aprendizado de máquina automatizado

APLICA-SE A: Python SDK azureml v1

Este artigo descreve opções para configurar dados de treinamento e divisões de dados de validação, juntamente com configurações de validação cruzada para seus experimentos de aprendizado de máquina automatizado (ML automatizado). No Aprendizado de Máquina do Azure, quando você usa o ML automatizado para criar vários modelos de aprendizado de máquina, cada execução filho precisa validar o modelo relacionado calculando as métricas de qualidade desse modelo, como precisão ou área sob a curva (AUC) ponderada. Essas métricas são calculadas comparando as previsões feitas com cada modelo com rótulos reais de observações anteriores nos dados de validação. Experimentos automatizados de ML executam a validação do modelo automaticamente.

As seções a seguir descrevem como você pode personalizar as configurações de validação com o SDK Python do Azure Machine Learning. Para saber mais sobre como as métricas são calculadas com base no tipo de validação, consulte a seção Definir cálculo de métricas para validação cruzada. Se você for interessante em uma experiência low-code ou no-code, consulte Criar seus experimentos automatizados de ML no estúdio do Azure Machine Learning.

Pré-requisitos

Importante

Os comandos Python neste artigo requerem a versão mais recente azureml-train-automl do pacote.

Definir divisões de dados padrão e validação cruzada no aprendizado de máquina

Para definir divisões de dados padrão e validação cruzada no aprendizado de máquina, use o objeto AutoMLConfig Class para definir suas configurações de experimento e treinamento. No exemplo a seguir, apenas os parâmetros necessários são definidos. Os n_cross_validations parâmetros e validation_data não estão incluídos.

Nota

Em cenários de previsão, não há suporte para divisões de dados padrão e validação cruzada.

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'
                            )

Se você não especificar explicitamente um validation_data ou n_cross_validations parâmetro, o ML automatizado aplicará técnicas padrão dependendo do número de linhas fornecidas no único conjunto training_datade dados.

Tamanho dos dados de treinamento Técnica de validação
Maior que 20.000 linhas É aplicada a divisão de dados de comboio/validação. O padrão é tomar 10% do conjunto de dados de treinamento inicial como o conjunto de validação. Por sua vez, esse conjunto de validação é usado para o cálculo de métricas.
Menor que 20.000 linhas É aplicada a abordagem de validação cruzada. O número padrão de dobras depende do número de linhas.
- Se o conjunto de dados for inferior a 1.000 linhas, serão usadas 10 dobras.
- Se as linhas estiverem entre 1.000 e 20.000, são usadas três dobras.

Fornecer conjunto de dados de validação

Você tem duas opções para fornecer dados de validação. Você pode começar com um único arquivo de dados e dividi-lo em dados de treinamento e conjuntos de dados de validação, ou pode fornecer um arquivo de dados separado para o conjunto de validação. De qualquer forma, o validation_data parâmetro em seu AutoMLConfig objeto atribui quais dados usar como seu conjunto de validação. Este parâmetro só aceita conjuntos de dados na forma de um conjunto de dados do Azure Machine Learning ou de um quadro de dados pandas.

Aqui estão algumas outras considerações para trabalhar com parâmetros de validação:

  • Você pode definir apenas um parâmetro de validação, o parâmetro ou o validation_data n_cross_validations parâmetro, mas não ambos.
  • Ao usar o validation_data parâmetro, você também deve especificar os training_data parâmetros e label_column_name .

O exemplo a seguir define explicitamente qual parte do dataset deve ser usada para treinamento (training_data) e para validação (validation_data):

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'
                            )

Fornecer o tamanho do conjunto de dados de validação

Ao fornecer o tamanho do conjunto de validação, você fornece apenas um único conjunto de dados para o experimento. O validation_data parâmetro não é especificado e o conjunto de dados fornecido é atribuído ao training_data parâmetro.

Em seu AutoMLConfig objeto, você pode definir o validation_size parâmetro para armazenar uma parte dos dados de treinamento para validação. Para essa estratégia, o trabalho de ML automatizado divide o conjunto de validação do inicial training_data fornecido. O valor deve estar entre 0,0 e 1,0 não inclusivo (por exemplo, 0,2 significa que 20% dos dados são mantidos para dados de validação).

Nota

Em cenários de previsão, o validation_size parâmetro não é suportado.

O exemplo a seguir fornece um único dataset para o experimento. O training_data acessa o conjunto de dados completo, e 20% do conjunto de dados é alocado para validação (validation_size = 0.2):

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'
                            )

Executar validação cruzada k-fold

Para executar a validação cruzada k-fold, inclua o n_cross_validations parâmetro e defina o número de dobras. Este parâmetro define quantas validações cruzadas devem ser executadas, com base no mesmo número de dobras.

Nota

Em cenários de classificação que usam redes neurais profundas (DNN), o n_cross_validations parâmetro não é suportado.

Para cenários de previsão, veja como a validação cruzada é aplicada em Configurar o AutoML para treinar um modelo de previsão de séries temporais.

O exemplo a seguir define cinco dobras para validação cruzada. O processo executa cinco treinamentos diferentes, onde cada treinamento usa 4/5 dos dados. Cada validação usa 1/5 dos dados com uma dobra de retenção diferente a cada vez. Como resultado, as métricas são calculadas com a média das cinco métricas de validação.

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'
                            )

Executar validação cruzada de Monte Carlo

Para executar a validação cruzada de Monte Carlo, inclua os validation_size parâmetros e n_cross_validations em seu AutoMLConfig objeto.

Para a validação cruzada de Monte Carlo, o ML automatizado reserva a parte dos dados de treinamento especificada pelo validation_size parâmetro para validação e, em seguida, atribui o restante dos dados para treinamento. Este processo é então repetido com base no valor especificado no parâmetro, o n_cross_validations que gera novas divisões de treinamento e validação, aleatoriamente, a cada vez.

Nota

Em cenários de previsão, a validação cruzada de Monte Carlo não é suportada.

O exemplo a seguir define sete dobras para validação cruzada e 20% dos dados de treinamento para validação. O processo executa sete treinamentos diferentes, onde cada treinamento usa 80% dos dados. Cada validação usa 20% dos dados com uma dobra de espera diferente de cada vez.

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'
                            )

Especificar dobras de dados personalizadas de validação cruzada

Também pode fornecer as suas próprias dobras de dados de validação cruzada (CV). Essa abordagem é considerada um cenário mais avançado porque você especifica quais colunas dividir e usar para validação. Você inclui colunas de divisão CV personalizadas em seus dados de treinamento e especifica quais colunas preenchendo os nomes das cv_split_column_names colunas no parâmetro. Cada coluna representa uma divisão de validação cruzada e tem um valor inteiro de 1 ou 0. Um valor de 1 indica que a linha deve ser usada para treinamento. Um valor 0 indica que a linha deve ser usada para validação.

Nota

Em cenários de previsão, o cv_split_column_names parâmetro não é suportado.

O exemplo a seguir contém dados de marketing bancário com duas colunas cv1 de divisão de CV e 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']
                            )

Nota

Para usar cv_split_column_names com training_data e label_column_name, atualize seu SDK Python do Azure Machine Learning versão 1.6.0 ou posterior. Para versões anteriores do SDK, consulte o uso do cv_splits_indices, mas observe que ele é usado apenas com X a entrada do conjunto de y dados.

Definir cálculo métrico para validação cruzada

Quando a validação cruzada k-fold ou Monte Carlo é usada, as métricas são calculadas em cada dobra de validação e, em seguida, agregadas. A operação de agregação é uma média para métricas escalares e uma soma para gráficos. As métricas calculadas durante a validação cruzada são baseadas em todas as dobras e, portanto, em todas as amostras do conjunto de treinamento. Para obter mais informações, consulte Avaliar resultados de experimentos de ML automatizados.

Quando um conjunto de validação personalizado ou um conjunto de validação selecionado automaticamente é usado, as métricas de avaliação do modelo são calculadas apenas a partir desse conjunto de validação, não dos dados de treinamento.

Fornecer conjunto de dados de teste (visualização)

Importante

Esta funcionalidade está atualmente em pré-visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas.

Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Você também pode fornecer dados de teste para avaliar o modelo recomendado que o ML automatizado gera para você após a conclusão do experimento. Quando você fornece dados de teste, os dados são considerados separados do treinamento e da validação para evitar qualquer efeito de viés nos resultados da execução de teste do modelo recomendado. Para obter mais informações, consulte Treinamento, validação e dados de teste.

Os conjuntos de dados de teste devem estar na forma de um TabularDataset do Azure Machine Learning. Você pode especificar um conjunto de dados de teste com os test_data parâmetros e test_size em seu AutoMLConfig objeto. Esses parâmetros são mutuamente exclusivos e não podem ser especificados ao mesmo tempo ou com os cv_split_column_names parâmetros ou cv_splits_indices .

No seu AutoMLConfig objeto, use o test_data parâmetro para especificar um conjunto de dados existente:

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

Para usar uma divisão trem/teste em vez de fornecer dados de teste diretamente, use o test_size parâmetro ao criar o AutoMLConfig. Este parâmetro deve ser um valor de ponto flutuante entre 0,0 e 1,0 exclusivo. Ele especifica a porcentagem do conjunto de dados de treinamento a ser usada para o conjunto de dados de teste.

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

Aqui estão algumas outras considerações para trabalhar com um conjunto de dados de teste:

  • Para tarefas de regressão, é utilizada amostragem aleatória.
  • Para tarefas de classificação, a amostragem estratificada é usada, mas a amostragem aleatória é usada como um fallback quando a amostragem estratificada não é viável.

Nota

Em cenários de previsão, atualmente não é possível especificar um conjunto de dados de teste usando uma divisão de trem/teste com o test_size parâmetro.

Passar os test_data parâmetros ou test_size para o objeto dispara automaticamente uma execução de teste remoto após a AutoMLConfig conclusão do experimento. Esta execução de teste usa os dados de teste fornecidos para avaliar o melhor modelo recomendado pelo ML automatizado. Para obter mais informações, consulte Obter resultados do trabalho de teste.