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
Uma área de trabalho do Azure Machine Learning. Para criar o espaço de trabalho, consulte Criar recursos do espaço de trabalho.
Familiaridade com a configuração de uma experiência de ML automatizada com o SDK do Azure Machine Learning. Para ver os padrões fundamentais de design de experimento de aprendizado de máquina automatizado, conclua o tutorial Treinar um modelo de deteção de objeto ou o guia Configurar treinamento AutoML com Python .
Uma compreensão das divisões de dados de treino/validação e validação cruzada como conceitos de aprendizagem automática. Para obter uma explicação de alto nível, consulte os seguintes artigos:
Importante
Os comandos Python neste artigo requerem a versão mais recente azureml-train-automl
do pacote.
- Instale o pacote mais recente
azureml-train-automl
em seu ambiente local. - Para obter detalhes sobre o pacote mais recente
azureml-train-automl
, consulte as notas de versão.
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_data
de 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 ostraining_data
parâmetros elabel_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.
Aviso
O recurso de conjunto de dados de teste não está disponível para os seguintes cenários de ML automatizado:
- Tarefas de visão computacional
- Muitos modelos e treinamento de previsão de séries temporais hieárquicas (HTS) (visualização)
- Tarefas de previsão em que redes neurais de aprendizagem profunda (DNN) estão ativadas
- O ML automatizado é executado a partir de cálculos locais ou clusters do Azure Databricks
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.