Compartilhar via


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

APLICA-SE A:azureml do SDK do Python v1

Neste artigo, você aprende as diferentes 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 ponderado. 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. Saiba mais sobre como as métricas são calculadas com base no tipo 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 Azure Machine Learning Python.

Para uma experiência de baixo código ou sem código, confira criar experiências de machine learning automatizado no estúdio do Azure Machine Learning.

Pré-requisitos

Para este artigo, você precisa,

Importante

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

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

Use o objeto AutoMLConfig para definir suas configurações de teste e treinamento. No snippet de código a seguir, observe que apenas os parâmetros necessários são definidos, e os parâmetros n_cross_validations para validation_data ou não estão incluídos.

Observação

Não há suporte para divisões de dados padrão e validação cruzada em cenários de previsã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,
                             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 dados training_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 registros 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.

Forneça dados de validação

Nesse caso, 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 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.

Observação

O parâmetro validation_data requer que os parâmetros training_data e label_column_name também sejam definidos. Você só pode definir um parâmetro de validação, ou seja, você só pode especificar validation_data ou n_cross_validations, não ambos.

O exemplo de código a seguir define explicitamente qual parte dos dados fornecidos no dataset usar para treinamento e validação.

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

Forneça o tamanho do conjunto de validação

Nesse caso, apenas um único conjunto de um é fornecido para o experimento. Ou seja, o parâmetro validation_datanã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. Isso significa que o conjunto de validação será dividido pelo ML automatizado a partir do inicial training_data fornecido. Esse 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

Não há suporte para o validation_sizeparâmetro em cenários de previsão.

Confira o seguinte exemplo de código:

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

Validação cruzada K vezes

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

Observação

Não há suporte para o n_cross_validationsparâmetro em cenários de classificação que usam redes neurais profundas. 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.

No código a seguir, são definidas cinco partições para validação cruzada. Portanto, cinco treinamentos diferentes, cada um usando 4/5 dos dados, e cada validação usando 1/5 dos dados com uma partição 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'
                            )

Validação cruzada do Monte Carlo

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

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

Não há suporte para a validação cruzada de Monte Carlo em cenários de previsão.

O código a seguir define que 7 partições para validação cruzada e 20% dos dados de treinamento devem ser usados para validação. Portanto, 7 treinamentos diferentes, cada treinamento usa 80% dos dados, e cada validação usa 20% dos dados com uma partição de controle 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). Isso é considerado um cenário mais avançado, porque você está especificando quais colunas devem ser divididas e usadas para validação. Inclua colunas de divisão de CV personalizadas em seus dados de treinamento e especifique, preenchendo os nomes de coluna no cv_split_column_names parâmetro. Cada coluna representa uma divisão de validação cruzada e é preenchida com os valores inteiros 1 ou 0, em que 1 indica que a linha deve ser usada para treinamento e 0 indica que a linha deve ser usada para validação.

Observação

Não há suporte para o cv_split_column_namesparâmetro em cenários de previsão.

O snippet de código a seguir 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.

Cálculo de métrica para validação cruzada no aprendizado de máquina

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. Saiba mais sobre métricas no machine learning 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 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 os dados de teste, eles são considerados separados do treinamento e da validação, para não desviar os resultados da execução de teste do modelo recomendado. Saiba mais sobre dados de treinamento, validação e teste em ML automatizado.

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 cv_split_column_names ou cv_splits_indices.

Com o parâmetro test_data, especifique um conjuntos de dados existente para passar para o objeto AutoMLConfig.

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 deve ser um valor de ponto flutuante entre 0,0 e 1,0 exclusivo e especifica o percentual do conjunto de dados de treinamento que deve ser usado para o conjunto de dados de teste.

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

Observação

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 fall-back quando a amostragem estratificada não é viável.
No momento, a previsão não é compatível com a especificação de 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 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. Saiba mais sobre como obter as previsões da execução de teste.

Próximas etapas