Configurar dados de treinamento, validação, validação cruzada e teste em machine learning automatizado
APLICA-SE A: SDK do Python azureml 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,
Um Workspace do Azure Machine Learning. Para criar o workspace, confira Criar recursos do workspace.
Familiaridade com a configuração de um experimento de machine learning automatizado com o SDK do Azure Machine Learning. Siga o tutorial ou as instruções para ver os padrões de design de experimentos de machine learning automatizado.
Noções básicas sobre divisão/validação de dados de treinamento e validação cruzada como conceitos de aprendizado de máquina. Para uma explicação de alto nível,
Importante
Os comandos do Python neste artigo exigem a versão mais recente do pacote azureml-train-automl
.
- Instale o pacote
azureml-train-automl
mais recente em seu ambiente local. - Para obter detalhes sobre o pacote
azureml-train-automl
mais recente, veja as notas sobre a versão.
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_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. 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_size
parâ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_validations
parâ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_names
parâ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.
Aviso
Esse recurso não está disponível para os seguintes cenários de ML automatizado
- Tarefas da Pesquisa Visual Computacional
- Muitos modelos e treinamento de previsão de séries temporais hierárquicas (versão prévia)
- Tarefas de previsão em que as DNN (redes neurais de aprendizado profundo) estão habilitadas
- A ML automatizada é executada a partir de computação local ou de 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 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.