Condividi tramite


Configurare i dati di training, convalida, convalida incrociata e test in Machine Learning automatizzato

SI APPLICA A: Python SDK azureml v1

In questo articolo vengono illustrate le diverse opzioni disponibili per la configurazione delle suddivisioni dei dati di training e dei dati di convalida, unitamente alle impostazioni della convalida incrociata per gli esperimenti di Machine Learning automatizzato.

In Azure Machine Learning, quando viene usato ML automatizzato per creare più modelli di ML, ogni esecuzione figlio deve convalidare il modello correlato calcolando le metriche di qualità per quel modello, ad esempio l'accuratezza o l'area sotto la curva ponderata. Queste metriche vengono calcolate confrontando le previsioni effettuate con ogni modello con le etichette reali di osservazioni precedenti nei dati di convalida. Altre informazioni su come vengono calcolate le metriche in base al tipo di convalida.

Gli esperimenti di ML automatizzato eseguono automaticamente la convalida del modello. Le sezioni seguenti descrivono come personalizzare ulteriormente le impostazioni di convalida con Azure Machine Learning Python SDK.

Se si preferisce un'esperienza con poco codice o senza codice, vedere Creare gli esperimenti di Machine Learning automatizzato nello studio di Azure Machine Learning.

Prerequisiti

Per questo articolo sono necessari:

Importante

Con i comandi Python descritti in questo articolo è richiesta la versione più recente del pacchetto azureml-train-automl.

Convalida incrociata e suddivisioni dei dati predefinite in Machine Learning

Usare l'oggetto AutoMLConfig per definire le impostazioni dell'esperimento e del training. Nel frammento di codice seguente notare che vengono definiti solo i parametri obbligatori, ovvero i parametri per n_cross_validations o validation_data non sono inclusi.

Nota

La convalida incrociata e le suddivisioni dei dati predefinite non sono supportate in scenari di previsione.

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 non viene specificato in modo esplicito un parametro validation_data o n_cross_validations, ML automatizzato applica tecniche predefinite in base al numero di righe fornite nel singolo set di dati training_data.

Dimensioni dei dati di training Tecnica di convalida
Più di 20.000 righe Viene applicata la suddivisione dei dati di training/convalida. Per impostazione predefinita, come set di convalida viene considerato il 10% del set di dati di training iniziale. A sua volta, il set di convalida viene usato per il calcolo delle metriche.
Meno di 20.000 righe Viene applicato l'approccio di convalida incrociata. Il numero predefinito di riduzioni dipende dal numero di righe.
Se il set di dati contiene meno di 1.000 righe, vengono usate 10 riduzioni.
Se le righe sono comprese tra 1.000 e 20.000, vengono usate tre riduzioni.

Fornire i dati di convalida

In questo caso è possibile iniziare con un singolo file di dati e suddividerlo in set di dati di training e di convalida oppure è possibile fornire un file di dati separato per il set di convalida. In entrambi i casi il parametro validation_data nell'oggetto AutoMLConfig assegna i dati da usare come set di convalida. Questo parametro accetta set di dati solo sotto forma di set di dati di Azure Machine Learning o dataframe Pandas.

Nota

Il parametro validation_data richiede anche l'impostazione dei parametri training_data e label_column_name. È possibile impostare un solo parametro di convalida, ovvero è possibile specificare solo validation_data o n_cross_validations, non entrambi.

Nell'esempio di codice seguente viene definita in modo esplicito la parte dei dati forniti in dataset da usare per il training e la convalida.

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

Fornire le dimensioni del set di convalida

In questo caso viene fornito solo un singolo set di dati per l'esperimento. Questo significa che il parametro validation_data non viene specificato e il set di dati fornito viene assegnato al parametro training_data.

Nell'oggetto AutoMLConfig è possibile impostare il parametro validation_size per riservare una parte dei dati di training per la convalida. In questo modo ML automatizzato suddividerà il set di dati di convalida dal parametro training_data iniziale. Questo valore deve essere compreso tra 0,0 e 1,0 non inclusi. Ad esempio, 0,2 indica che il 20% dei dati viene riservato per i dati di convalida.

Nota

Il parametro validation_size non è supportato in scenari di previsione.

Vedere l'esempio di codice seguente:

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

Convalida incrociata in k parti

Per eseguire la convalida incrociata k-fold, includere il parametro n_cross_validations e impostarlo su un valore. Questo parametro imposta il numero di convalide incrociate da eseguire in base allo stesso numero di riduzioni.

Nota

Il parametro n_cross_validations non è supportato in scenari di previsione che usano reti neurali profonde. Per gli scenari di previsione vedere l'applicazione della convalida incrociata in Configurare AutoML per eseguire il training di un modello di previsione di serie temporali.

Nel codice seguente vengono definite cinque riduzioni per la convalida incrociata, ovvero cinque training diversi, in cui ogni training usa 4/5 dei dati e ogni convalida usa 1/5 dei dati con una riduzione dei dati di controllo ogni volta diversa.

Di conseguenza, le metriche vengono calcolate in base alla media delle cinque metriche di convalida.

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

Convalida incrociata Monte Carlo

Per eseguire la convalida incrociata Monte Carlo, includere i parametri validation_size e n_cross_validations nell'oggetto AutoMLConfig.

Per la convalida incrociata Monte Carlo, ML automatizzato esclude la parte dei dati di training specificati dal parametro validation_size per la convalida e quindi assegna il resto dei dati per il training. Questo processo viene quindi ripetuto in base al valore specificato nel parametro n_cross_validations. In questo modo vengono generate sempre nuove suddivisioni casuali dei dati di training e di convalida.

Nota

La convalida incrociata Monte Carlo non è supportata in scenari di previsione.

Il codice seguente definisce sette riduzioni per la convalida incrociata e per la convalida viene usato il 20% dei dati di training, ovvero sette training diversi, in cui ogni training usa l'80% dei dati e ogni convalida usa il 20% dei dati con una riduzione dei dati di controllo ogni volta diversa.

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

Specificare riduzioni dei dati di convalida incrociata personalizzate

È anche possibile fornire riduzioni dei dati di convalida incrociata personalizzate. Si tratta di uno scenario più avanzato perché è necessario specificare le colonne da dividere e da usare per la convalida. Includere colonne personalizzate suddivise di convalida incrociata nei dati di training e specificare le colonne popolando i nomi delle colonne nel parametro cv_split_column_names. Ogni colonna rappresenta una suddivisione di convalida incrociata e viene compilata con valori interi 1 o 0, dove 1 indica che la riga deve essere usata per il training e 0 indica che la riga deve essere usata per la convalida.

Nota

Il parametro cv_split_column_names non è supportato in scenari di previsione.

Il frammento di codice seguente contiene dati di marketing bancari con due colonne di suddivisione di convalida incrociata '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

Per usare cv_split_column_names con training_data e label_column_name, aggiornare Azure Machine Learning Python SDK versione 1.6.0 o successiva. Per le versioni precedenti di SDK, vedere le indicazioni relative all'uso di cv_splits_indices, ma tenere presente che viene usato solo con input di set di dati X e y.

Calcolo delle metriche per la convalida incrociata in Machine Learning

Quando si usa la convalida incrociata Monte Carlo o k-fold, le metriche vengono calcolate in ogni riduzione di convalida e successivamente aggregate. L'operazione di aggregazione è una media per le metriche scalari e una somma per i grafici. Le metriche calcolate durante la convalida incrociata sono basate su tutte le riduzioni e quindi tutti i campioni del set di training. Altre informazioni sulle metriche in Machine Learning automatizzato.

Quando si usa un set di convalida personalizzato o un set di convalida selezionato automaticamente, le metriche di valutazione del modello vengono calcolate solo da tale set di convalida, non dai dati di training.

Fornire dati di test (anteprima)

Importante

Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate.

Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

È anche possibile fornire dati di test per valutare il modello consigliato generato da ML automatizzato al termine dell'esperimento. Quando si forniscono dati di test, questi vengono considerati separati dal training e dalla convalida, in modo da non influenzare i risultati dell'esecuzione dei test del modello consigliato. Altre informazioni sul training, sulla convalida e sul test dei dati in ML automatizzato.

I set di dati di test devono essere specificati nel formato TabularDataset di Azure Machine Learning. È possibile specificare un set di dati di test con i parametri test_data e test_size nell'oggetto AutoMLConfig. Questi parametri si escludono a vicenda e non possono essere specificati contemporaneamente o con cv_split_column_names o cv_splits_indices.

Con il parametro test_data specificare un set di dati esistente da passare nell'oggetto AutoMLConfig.

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

Per usare una suddivisione di dati di training/test, invece di fornire direttamente i dati di test, usare il parametro test_size durante la creazione dell'oggetto AutoMLConfig. Questo parametro deve essere un valore a virgola mobile compreso tra 0,0 e 1,0 esclusi e specifica la percentuale di set di dati di training che devono essere usati per il set di dati di test.

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

Nota

Per le attività di regressione, viene usato il campionamento casuale.
Per le attività di classificazione, viene usato il campionamento stratificato, ma il campionamento casuale viene usato come fallback quando il campionamento stratificato non è possibile.
La previsione non supporta attualmente la specifica di un set di dati di test usando una suddivisione di dati di training/test con il parametro test_size.

Il passaggio dei parametri test_data o test_size in AutoMLConfig attiva automaticamente un'esecuzione dei test da remoto al completamento dell'esperimento. Questa esecuzione dei test usa i dati di test forniti per valutare il modello migliore consigliato da ML automatizzato. Altre informazioni su come ottenere le previsioni dall'esecuzione dei test.

Passaggi successivi