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

APLICA-SE A:Python SDK azureml v1

Neste artigo, irá aprender as diferentes opções para configurar dados de preparação e divisões de dados de validação, juntamente com as definições de validação cruzada para a sua aprendizagem automática automatizada, ML automatizado, experimentações.

No Azure Machine Learning, quando utiliza o ML automatizado para criar vários modelos de ML, cada execução subordinada tem de validar o modelo relacionado ao calcular as métricas de qualidade desse modelo, como a precisão ou a ponderação do AUC. Estas métricas são calculadas ao comparar as predições feitas com cada modelo com etiquetas reais de 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.

As experimentações de ML automatizadas executam a validação de modelos automaticamente. As secções seguintes descrevem como pode personalizar ainda mais as definições de validação com o SDK Python do Azure Machine Learning.

Para obter uma experiência de baixo código ou sem código, veja Criar as suas experimentações de machine learning automatizadas no estúdio do Azure Machine Learning.

Pré-requisitos

Para este artigo de que precisa,

Importante

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

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

Utilize o objeto AutoMLConfig para definir as definições de experimentação e preparação. No fragmento de código seguinte, repare que apenas os parâmetros necessários estão definidos, ou seja, os parâmetros para n_cross_validations ou validation_datanão estão incluídos.

Nota

As divisões de dados predefinidas e a validação cruzada não são suportadas 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 não especificar explicitamente um validation_data ou n_cross_validations parâmetro, o ML automatizado aplica técnicas predefinidas consoante o número de linhas fornecidas no conjunto de dados training_dataúnico .

Tamanho dos dados de preparação Técnica de validação
Maior que 20 000 linhas A divisão de dados de preparação/validação é aplicada. A predefinição é assumir 10% do conjunto de dados de preparação inicial como o conjunto de validação. Por sua vez, esse conjunto de validação é utilizado para cálculo de métricas.
Menor que 20 000 linhas É aplicada uma abordagem de validação cruzada. O número predefinido de pastas depende do número de linhas.
Se o conjunto de dados for inferior a 1000 linhas, são utilizadas 10 pastas.
Se as linhas estiverem entre 1000 e 20 000, são utilizadas três pastas.

Fornecer dados de validação

Neste caso, pode começar com um único ficheiro de dados e dividi-lo em conjuntos de dados de preparação e validação ou fornecer um ficheiro de dados separado para o conjunto de validação. De qualquer forma, o validation_data parâmetro no objeto AutoMLConfig atribui os dados a utilizar como conjunto de validação. Este parâmetro só aceita conjuntos de dados na forma de um conjunto de dados do Azure Machine Learning ou do dataframe pandas.

Nota

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

O seguinte exemplo de código define explicitamente a parte dos dados dataset fornecidos a utilizar para preparação 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'
                            )

Fornecer tamanho do conjunto de validação

Neste caso, só é fornecido um único conjunto de dados para a experimentação. Ou seja, o validation_data parâmetro não é especificado e o conjunto de dados fornecido é atribuído ao training_data parâmetro.

No seu AutoMLConfig objeto, pode definir o validation_size parâmetro para manter uma parte dos dados de preparação para validação. Isto significa que o conjunto de validação será dividido por ML automatizado da inicial training_data fornecida. Este 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

O validation_size parâmetro não é suportado em cenários de previsão.

Veja 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 do K-fold

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

Nota

O n_cross_validations parâmetro não é suportado em cenários de classificação que utilizam redes neurais profundas. Para cenários de previsão, veja como a validação cruzada é aplicada em Configurar o AutoML para preparar um modelo de previsão de série temporal.

No código seguinte, são definidas cinco pastas para validação cruzada. Assim, cinco preparações diferentes, cada formação com 4/5 dos dados e cada validação com 1/5 dos dados com uma dobra de retenção diferente de 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 de Monte Carlo

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

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

Nota

A validação cruzada de Monte Carlo não é suportada em cenários de previsão.

O código seguinte define sete pastas para validação cruzada e 20% dos dados de preparação devem ser utilizados para validação. Assim, 7 formações diferentes, cada preparação utiliza 80% dos dados e cada validação utiliza 20% dos dados com uma dobra de retenção 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 pastas de dados de validação cruzada personalizadas

Também pode fornecer as suas próprias pastas de dados de validação cruzada (CV). Este é considerado um cenário mais avançado porque está a especificar as colunas a dividir e a utilizar para validação. Inclua colunas de divisão cv personalizadas nos seus dados de preparação e especifique as colunas ao preencher os nomes das colunas no cv_split_column_names parâmetro. Cada coluna representa uma divisão de validação cruzada e é preenchida com valores inteiros 1 ou 0- em que 1 indica que a linha deve ser utilizada para preparação e 0 indica que a linha deve ser utilizada para validação.

Nota

O cv_split_column_names parâmetro não é suportado em cenários de previsão.

O fragmento de código seguinte contém dados de marketing bancário com duas colunas divididas por 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']
                            )

Nota

Para utilizar cv_split_column_names com training_data e label_column_name, atualize o SDK Python do Azure Machine Learning versão 1.6.0 ou posterior. Para versões anteriores do SDK, veja utilizar cv_splits_indiceso , mas tenha em atenção que é utilizado apenas com X e y entradas de conjuntos de dados.

Cálculo de métricas para validação cruzada no machine learning

Quando é utilizada a validação cruzada k-fold ou Monte Carlo, as métricas são calculadas em cada pasta 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 baseiam-se em todas as pastas e, portanto, em todas as amostras do conjunto de preparação. Saiba mais sobre as métricas no machine learning automatizado.

Quando é utilizado um conjunto de validação personalizado ou um conjunto de validação selecionado automaticamente, as métricas de avaliação de modelos são calculadas apenas a partir desse conjunto de validação e não dos dados de preparação.

Fornecer dados de teste (pré-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.

Também pode fornecer dados de teste para avaliar o modelo recomendado que o ML automatizado gera automaticamente após a conclusão da experimentação. Quando fornece dados de teste, são considerados separados da preparação e validação, de modo a não influenciar os resultados da execução de teste do modelo recomendado. Saiba mais sobre a preparação, validação e dados de teste no ML automatizado.

Os conjuntos de dados de teste têm de estar sob a forma de um TabularDataset do Azure Machine Learning. Pode especificar um conjunto de dados de teste com os test_data parâmetros e test_size no objeto AutoMLConfig . Estes 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 test_data parâmetro , especifique um conjunto de dados existente para transmitir para o objeto AutoMLConfig .

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

Para utilizar uma divisão train/test em vez de fornecer dados de teste diretamente, utilize o test_size parâmetro ao criar o AutoMLConfig. Este parâmetro tem de ser um valor de vírgula flutuante entre 0,0 e 1,0 exclusivo e especifica a percentagem do conjunto de dados de preparação que deve ser utilizado para o conjunto de dados de teste.

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

Nota

Para tarefas de regressão, é utilizada a amostragem aleatória.
Para tarefas de classificação, é utilizada a amostragem estratificada, mas a amostragem aleatória é utilizada como contingência quando a amostragem estratificada não é viável.
Atualmente, a previsão não suporta a especificação de um conjunto de dados de teste com uma divisão train/test com o test_size parâmetro .

Transmitir os test_data parâmetros ou test_size para o AutoMLConfig, aciona automaticamente uma execução de teste remoto após a conclusão da experimentação. Esta execução de teste utiliza os dados de teste fornecidos para avaliar o melhor modelo recomendado pelo ML automatizado. Saiba mais sobre como obter as predições da execução de testes.

Passos seguintes