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

SI APPLICA A:Azureml di Python SDK v1

In questo articolo si apprenderà le diverse opzioni per configurare i dati di training e le suddivisioni dei dati di convalida insieme alle impostazioni di convalida incrociata per l'apprendimento automatico, ml automatizzato, esperimenti.

In Azure Machine Learning, quando si usa Machine Learning automatizzato per compilare più modelli di Machine Learning, ogni esecuzione figlio deve convalidare il modello correlato calcolando le metriche di qualità per tale modello, ad esempio accuratezza o AUC ponderate. Queste metriche vengono calcolate confrontando le stime effettuate con ogni modello con etichette reali dalle osservazioni precedenti nei dati di convalida. Altre informazioni su come vengono calcolate le metriche in base al tipo di convalida.

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

Per un'esperienza di apprendimento automatico o senza codice, vedere Creare esperimenti di Machine Learning automatizzati in studio di Azure Machine Learning.

Prerequisiti

Per questo articolo è necessario,

Importante

I comandi Python in questo articolo richiedono la versione più recente azureml-train-automl del pacchetto.

Suddivisioni di dati predefinite e convalida incrociata in Machine Learning

Usare l'oggetto AutoMLConfig per definire le impostazioni di esperimento e training. Nel frammento di codice seguente si noti che vengono definiti solo i parametri obbligatori, ovvero i parametri per n_cross_validations o validation_datanon sono inclusi.

Nota

Le suddivisioni di dati predefinite e la convalida incrociata non sono supportate negli 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 si specifica in modo esplicito un validation_data parametro o n_cross_validations , ml automatizzato applica tecniche predefinite a seconda del numero di righe fornite nel singolo set di dati training_data.

Dimensioni dei dati di training Tecnica di convalida
Più grande di 20.000 righe Viene applicata la suddivisione dei dati di training/convalida. Il valore predefinito consiste nell'accettare il 10% del set di dati di training iniziale come set di convalida. A sua volta, tale set di convalida viene usato per il calcolo delle metriche.
Più piccolo di 20.000 righe Viene applicato un approccio di convalida incrociata. Il numero predefinito di piega dipende dal numero di righe.
Se il set di dati è minore di 1.000 righe, vengono usate 10 volte.
Se le righe sono comprese tra 1.000 e 20.000, vengono usate tre volte.

Fornire dati di convalida

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

Nota

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

L'esempio di codice seguente definisce 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'
                            )

Specificare le dimensioni del set di convalida

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

AutoMLConfig Nell'oggetto è possibile impostare il validation_size parametro per contenere una parte dei dati di training per la convalida. Ciò significa che il set di convalida verrà suddiviso da ML automatizzato dall'iniziale training_data fornito. Questo valore deve essere compreso tra 0,0 e 1,0 non inclusivo (ad esempio, 0,2 significa che il 20% dei dati viene mantenuto per i dati di convalida).

Nota

Il validation_size parametro non è supportato negli 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 n_cross_validations parametro e impostarlo su un valore. Questo parametro imposta il numero di convalida incrociate da eseguire, in base allo stesso numero di volte.

Nota

Il n_cross_validations parametro non è supportato negli scenari di classificazione che usano reti neurali profonde. Per gli scenari di previsione, vedere come viene applicata la convalida incrociata in Configurare AutoML per eseguire il training di un modello di previsione delle serie temporali.

Nel codice seguente vengono definite cinque volte per la convalida incrociata. Di conseguenza, cinque training diversi, ogni training usando 4/5 dei dati e ogni convalida usando 1/5 dei dati con una piega di blocco diversa ogni volta.

Di conseguenza, le metriche vengono calcolate con la 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 di Monte Carlo

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

Per la convalida incrociata di Monte Carlo, ml automatizzato imposta la parte dei dati di training specificati dal parametro per la convalida e quindi assegna il resto dei dati per il validation_size training. Questo processo viene quindi ripetuto in base al valore specificato nel n_cross_validations parametro, che genera nuove suddivisioni di training e convalida, in modo casuale, ogni volta.

Nota

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

Il codice seguente definisce, 7 volte per la convalida incrociata e il 20% dei dati di training deve essere usato per la convalida. Di conseguenza, 7 training diversi, ogni training usa il 80% dei dati e ogni convalida usa il 20% dei dati con una piega di blocco diversa ogni volta.

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 le piegazioni di dati di convalida incrociata personalizzate

È anche possibile fornire le proprie volte di dati di convalida incrociata (CV). Questo è considerato uno scenario più avanzato perché si specificano le colonne da dividere e usare per la convalida. Includere colonne personalizzate di divisione cv nei dati di training e specificare quali colonne popolano i nomi di colonna nel cv_split_column_names parametro. Ogni colonna rappresenta una divisione tra convalida e viene riempita 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 cv_split_column_names parametro non è supportato negli scenari di previsione.

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

Per usare cv_split_column_names e training_datalabel_column_name, aggiornare Azure Machine Learning Python SDK versione 1.6.0 o successiva. Per le versioni precedenti di SDK, fare riferimento all'uso cv_splits_indicesdi , ma si noti che viene usato solo con X e y l'input del set di dati.

Calcolo delle metriche per la convalida incrociata in Machine Learning

Quando viene usata la convalida incrociata k-fold o Monte Carlo, le metriche vengono calcolate su ogni piega di convalida e quindi aggregate. L'operazione di aggregazione è una media per le metriche scalari e una somma per i grafici. Le metriche calcolate durante la convalida incrociata si basano su tutte le piegazioni e quindi tutti gli esempi del set di training. Altre informazioni sulle metriche in Machine Learning automatizzato.

Quando viene usato 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 e non è consigliata per carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo 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 specificano dati di test, questi dati sono considerati separati dal training e dalla convalida, in modo da evitare distorsioni sui risultati dell'esecuzione del test del modello consigliato. Altre informazioni su training, convalida e test dei dati in Machine Learning automatizzato.

I set di dati di test devono essere sotto forma di tabulareDataset di Azure Machine Learning. È possibile specificare un set di dati di test con i parametri e test_size nell'oggetto.test_dataAutoMLConfig Questi parametri si escludono a vicenda e non possono essere specificati contemporaneamente o con cv_split_column_names o cv_splits_indices.

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

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

Per usare una divisione di training/test anziché fornire direttamente i dati di test, usare il parametro durante la test_size creazione di AutoMLConfig. Questo parametro deve essere un valore a virgola mobile compreso tra 0,0 e 1,0 esclusivo e specifica la percentuale del set di dati di training da usare 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 è fattibile.
La previsione non supporta attualmente la specifica di un set di dati di test usando una divisione di training/test con il test_size parametro .

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

Passaggi successivi