Compartilhar via


Configurar dados de treinamento, validação, validação cruzada e teste em machine learning automatizado

APLICA-SE A: SDK do Python azureml v1

Este artigo descreve as opções para configurar dados de treinamento e dados de validação divididos juntamente com configurações de validação cruzada para experimentos de machine learning automatizado, ML automatizado. No Azure Machine Learning, quando você usa o ML automatizado para criar vários modelos de ML, cada execução derivada precisa validar o modelo relacionado calculando as métricas de qualidade para esse modelo, como precisão ou AUC (área sob a curva) ponderada. Essas métricas são calculadas comparando as previsões feitas com cada modelo com rótulos reais das observações anteriores nos dados de validação. Os experimentos de ML automatizado executam automaticamente a validação do modelo.

As seções a seguir descrevem como você pode personalizar ainda mais as configurações de validação com o SDK do Python do Azure Machine Learning. Para saber mais sobre como as métricas são calculadas com base no tipo de validação, confira a seção Definir cálculo de métrica para validação cruzada. Para uma experiência com pouco código ou sem código, confira Criar experiências de ML automatizado no Estúdio do Azure Machine Learning.

Pré-requisitos

Importante

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

Definir divisões de dados e validação cruzada padrão no machine learning automatizado

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

Observação

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 parâmetro validation_data ou n_cross_validations, o ML automatizado aplicará técnicas padrão dependendo do número de linhas fornecidas no único conjunto de dadostraining_data.

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

Fornecer um conjunto de dados de validação

Você tem duas opções para fornecer dados de validação. Você pode começar com apenas um 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 os dados a serem usados como seu conjunto de validação. Esse parâmetro só aceita conjuntos de dados na forma de um conjunto de dados Azure Machine Learning ou pandas dataframe.

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 validation_data ou o parâmetro n_cross_validations, mas não ambos.
  • Ao usar o parâmetro validation_data, você também precisa especificar os parâmetros training_data e label_column_name.

O seguinte exemplo define explicitamente qual parte do dataset usar para treinamento (training_data) e 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

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

Em seu AutoMLConfig objeto, você pode definir o validation_size parâmetro para manter 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 training_data inicial que você fornece. 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).

Observação

Em cenários de previsão, não há suporte para o parâmetro validation_size.

O exemplo a seguir fornece apenas um dataset para o experimento. O training_data acessa o conjunto de dados completo e 20% do conjunto de dados são alocados 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'
                            )

Realizar validação cruzada k-fold

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

Observação

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

Para cenários de previsão, consulte como a validação cruzada é aplicada emConfigurar AutoML para treinar um modelo de previsão de série temporal.

O exemplo a seguir define cinco dobras para validação cruzada. O processo executa cinco treinamentos diferentes, em que cada treinamento usa 4/5 dos dados. Cada validação usa 1/5 dos dados com uma dobra de controle 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 a validação cruzada de Monte Carlo

Para executar a validação cruzada do Monte Carlo, você inclui os parâmetros validation_size e n_cross_validations em seu objeto AutoMLConfig.

Para a validação cruzada do Monte Carlo, automatize os conjuntos de ML além da parte dos dados de treinamento especificados pelo validation_size parâmetro para validação. Em seguida, atribua o restante dos dados para treinamento. Esse processo é repetido com base no valor especificado no parâmetro n_cross_validations, o que gera novas divisões de treinamento e validação, aleatoriamente, a cada vez.

Observação

Em cenários de previsão, não há suporte para validação cruzada de Monte Carlo.

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, em que cada treinamento usa 80% dos dados. Cada validação usa 20% dos dados com uma dobra de retenção diferente a 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'
                            )

Especifique partições de dados de validação cruzada personalizadas

Você também pode fornecer suas próprias partições de dados de validação cruzada (CV). Essa abordagem é considerada um cenário mais avançado, porque você especifica quais colunas devem ser divididas e usadas para validação. Você inclui colunas de divisão de CV personalizadas em seus dados de treinamento e especifica quais colunas, preenchendo os nomes de coluna no parâmetro cv_split_column_names. 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 de 0 indica que a linha deve ser usada para validação.

Observação

Em cenários de previsão, não há suporte para o parâmetro cv_split_column_names.

O seguinte snippet de código contém dados de marketing bancário com duas colunas de divisão de CV, cv1 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']
                            )

Observação

Para usar cv_split_column_names com training_data e label_column_name, atualize seu Azure Machine Learning SDK do Python para versão 1.6.0 ou posterior. Para versões anteriores do SDK, consulte usando cv_splits_indices, mas observe que ela é usada somente com as entradas de conjunto de dados X e y.

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

Quando a validação cruzada k-fold ou Monte Carlo é usada, as métricas são computadas em cada partição 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 computadas durante a validação cruzada são baseadas em todas as partições e, portanto, em todas as amostras do conjunto de treinamento. Para obter mais informações, confira Avaliar os resultados do experimento de ML automatizado.

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 computadas somente daquele conjunto de validação, não dos dados de treinamento.

Fornecer conjunto de dados de teste (versão prévia)

Importante

Esse recurso está atualmente em visualização pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos.

Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias 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 conjuntos de dados de teste com os parâmetros test_data e test_size no objeto AutoMLConfig. Esses parâmetros são mutuamente exclusivos e não podem ser especificados ao mesmo tempo ou com os parâmetros cv_split_column_names ou cv_splits_indices.

Em seu objeto AutoMLConfig, use o parâmetro test_data 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 de treinamento/teste, em vez de fornecer dados de teste diretamente, use o parâmetro test_size ao criar o AutoMLConfig. Esse parâmetro precisa ser um valor de ponto flutuante entre 0,0 e 1,0, não inclusivo. 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, usa-se a 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.

Observação

Em cenários de previsão, atualmente você não pode especificar um conjunto de dados de teste usando uma divisão de treinamento/teste com o parâmetro test_size.

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