Condividi tramite


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

Si applica a: Python SDK azureml v1

Questo articolo descrive le opzioni per la configurazione dei dati di training e delle suddivisioni dei dati di convalida insieme alle impostazioni di convalida incrociata per gli esperimenti automatizzati di Machine Learning (ML automatizzato). In Azure Machine Learning, quando si usa Machine Learning automatizzato per creare 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 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. Gli esperimenti di ML automatizzato eseguono automaticamente la convalida del modello.

Le sezioni seguenti descrivono come personalizzare le impostazioni di convalida con Azure Machine Learning Python SDK. Per altre informazioni sul modo in cui le metriche vengono calcolate in base al tipo di convalida, vedere la sezione Impostare il calcolo delle metriche per la convalida incrociata. Se si è interessanti in un'esperienza con poco codice o senza codice, vedere Creare esperimenti di Machine Learning automatizzati in studio di Azure Machine Learning.

Prerequisiti

Importante

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

Impostare le suddivisioni dei dati predefinite e la convalida incrociata in Machine Learning

Per impostare le suddivisioni dei dati predefinite e la convalida incrociata in Machine Learning, usare l'oggetto Classe AutoMLConfig per definire le impostazioni dell'esperimento e del training. Nell'esempio seguente vengono definiti solo i parametri obbligatori. I n_cross_validations parametri e validation_data non sono inclusi.

Nota

Negli scenari di previsione, le suddivisioni predefinite dei dati e la convalida incrociata non sono supportate.

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 , Machine Learning 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ù 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 è minore di 1.000 righe, vengono usate 10 riduzioni.
- Se le righe sono comprese tra 1.000 e 20.000, vengono usate tre pieghe.

Specificare il set di dati di convalida

Sono disponibili due opzioni per fornire i dati di convalida. È possibile iniziare con un singolo file di dati e suddividerlo in set di dati di training e di convalida oppure specificare 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.

Ecco alcune altre considerazioni per l'uso dei parametri di convalida:

  • È possibile impostare un solo parametro di convalida, ovvero il validation_data parametro o il n_cross_validations parametro , ma non entrambi.
  • Quando si usa il validation_data parametro , è necessario specificare anche i training_data parametri e label_column_name .

Nell'esempio seguente viene definita in modo esplicito quale parte di dataset da usare per il training (training_data) e per la convalida (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'
                            )

Specificare le dimensioni del set di dati di convalida

Quando si specificano le dimensioni del set di convalida, si specifica solo un singolo set di dati per l'esperimento. Il validation_data parametro non viene specificato e il set di dati fornito viene assegnato al training_data parametro .

Nell'oggetto AutoMLConfig è possibile impostare il parametro validation_size per riservare una parte dei dati di training per la convalida. Per questa strategia, il processo di Machine Learning automatizzato suddivide il set di convalida dall'iniziale training_data fornito. Il valore deve essere compreso tra 0,0 e 1,0 nonclusive (ad esempio, 0,2 indica che il 20% dei dati viene mantenuto per i dati di convalida).

Nota

Negli scenari di previsione il validation_size parametro non è supportato.

Nell'esempio seguente viene fornito un singolo dataset oggetto per l'esperimento. Accede training_data al set di dati completo e il 20% del set di dati viene allocato per la convalida (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'
                            )

Eseguire la convalida incrociata k-fold

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

Nota

Negli scenari di classificazione che usano reti neurali profonde (DNN), il n_cross_validations parametro non è supportato.

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.

Nell'esempio seguente vengono definite cinque riduzioni per la convalida incrociata. Il processo esegue cinque training diversi, in cui ogni training usa 4/5 dei dati. Ogni convalida usa 1/5 dei dati con un blocco diverso ogni volta. 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'
                            )

Eseguire la convalida incrociata di Monte Carlo

Per eseguire la convalida incrociata di Monte Carlo, includere entrambi i validation_size parametri 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 n_cross_validations parametro , che genera nuove divisioni di training e convalida, in modo casuale, ogni volta.

Nota

Negli scenari di previsione, la convalida incrociata di Monte Carlo non è supportata.

Nell'esempio seguente vengono definite sette riduzioni per la convalida incrociata e il 20% dei dati di training per la convalida. Il processo esegue sette training diversi, in cui ogni training usa l'80% dei dati. Ogni convalida usa il 20% dei dati con una riduzione 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 riduzioni dei dati di convalida incrociata personalizzate

È anche possibile fornire riduzioni dei dati di convalida incrociata personalizzate. Questo approccio è considerato uno scenario più avanzato perché si specificano le colonne da dividere e usare per la convalida. È possibile includere colonne personalizzate suddivise cv nei dati di training e specificare le colonne popolando i nomi delle colonne nel cv_split_column_names parametro . Ogni colonna rappresenta una divisione di convalida incrociata e ha un valore intero pari a 1 o 0. Il valore 1 indica che la riga deve essere usata per il training. Il valore 0 indica che la riga deve essere usata per la convalida.

Nota

Negli scenari di previsione il cv_split_column_names parametro non è supportato.

L'esempio seguente contiene dati di marketing bancari con due colonne cv1 suddivise 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

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.

Impostare il calcolo delle metriche per la convalida incrociata

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. Per altre informazioni, vedere Valutare i risultati dell'esperimento di 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.

Specificare il set di 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, i dati vengono considerati separati dal training e dalla convalida per evitare effetti di distorsione sui risultati dell'esecuzione del test del modello consigliato. Per altre informazioni, vedere Training, convalida e test dei dati.

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 i cv_split_column_names parametri o cv_splits_indices .

Nell'oggetto AutoMLConfig usare il test_data parametro per specificare un set di dati esistente:

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 esclusivo. 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)

Ecco alcune altre considerazioni per l'uso di un set di dati di test:

  • 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.

Nota

Negli scenari di previsione non è attualmente possibile specificare un set di dati di test usando una suddivisione di training/test con il test_size parametro .

Il passaggio dei test_data parametri o test_size nell'oggetto AutoMLConfig attiva automaticamente un'esecuzione di test remoto al completamento dell'esperimento. Questa esecuzione dei test usa i dati di test forniti per valutare il modello migliore consigliato da ML automatizzato. Per altre informazioni, vedere Ottenere i risultati del processo di test.