Partager via


Configurer l’apprentissage, la validation, la validation croisée et les données de test dans le Machine Learning automatisé

S’APPLIQUE À : SDK Python azureml v1

Cet article décrit les options de configuration du fractionnement des données d’apprentissage et de validation ainsi que des paramètres de la validation croisée pour vos expériences de Machine Learning automatisé (AutoML). Dans Azure Machine Learning, quand vous utilisez AutoML pour générer plusieurs modèles de Machine Learning, chaque exécution enfant doit valider le modèle associé en calculant les métriques de qualité pour ce modèle, comme l’exactitude ou l’AUC pondérée. Ces métriques sont calculées en comparant les prédictions effectuées avec chaque modèle avec des balises d’observations passées basées sur les données de validation. Les expériences d’AutoML effectuent automatiquement la validation du modèle.

Les sections suivantes décrivent comment vous pouvez personnaliser les paramètres de validation avec le Kit de développement logiciel (SDK) Python pour Azure Machine Learning. Pour en savoir plus sur la façon dont les métriques sont calculées en fonction du type de validation, consultez la section Définir le calcul des métriques pour la validation croisée. Si vous êtes intéressé par une expérience low-code ou sans code, consultez Créer vos expériences AutoML dans Azure Machine Learning studio.

Prérequis

Important

Les commandes python de cet article requièrent la dernière azureml-train-automl version du package.

Définir les fractionnements et la validation croisée de données par défaut dans le Machine Learning

Pour définir les fractionnements et la validation croisée de données par défaut dans le Machine Learning, utilisez l’objet de classe AutoMLConfig pour définir vos paramètres pour l’expérience et l’apprentissage. Dans l’exemple suivant, seuls les paramètres requis sont définis. Les paramètres n_cross_validations et validation_data ne sont pas inclus.

Remarque

Dans les scénarios de prévision, les fractionnements et la validation croisée de données par défaut ne sont pas pris en charge.

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

Si vous ne spécifiez pas explicitement un paramètre validation_data ou n_cross_validations, AutoML applique les techniques par défaut en fonction du nombre de lignes fournies dans le jeu de données training_data.

Taille des données de formation Technique de validation
Plus de 20 000 lignes Le fractionnement des données de formation/validation est appliqué. La valeur par défaut consiste à prendre 10 % du jeu de données d’apprentissage initial en tant que jeu de validation. Ce jeu de validation est ensuite utilisé pour le calcul des métriques.
Moins de 20 000 lignes L’approche de validation croisée est appliquée. Le nombre de plis par défaut dépend du nombre de lignes.
- Si le jeu de données comporte moins de 1 000 lignes, 10 plis sont utilisés.
- S’il y a entre 1 000 et 20 000 lignes, trois plis sont utilisés.

Fournir un jeu de données de validation

Vous avez deux options pour fournir des données de validation. Vous pouvez commencer avec un seul fichier de données et le fractionner en jeux de données d’apprentissage et de validation, ou vous pouvez fournir un fichier de données distinct pour le jeu de validation. Dans les deux cas, le paramètre validation_data de votre objet AutoMLConfig assigne les données à utiliser comme jeu de validation. Ce paramètre n’accepte que les jeux de données sous la forme d’un jeu données Azure Machine Learning ou d’un cadre de données Pandas.

Voici quelques autres considérations relatives à l’utilisation des paramètres de validation :

  • Vous ne pouvez définir qu’un seul paramètre de validation : le paramètre validation_data ou le paramètre n_cross_validations, mais pas les deux.
  • Quand vous utilisez le paramètre validation_data, vous devez aussi spécifier les paramètres training_data et label_column_name.

L’exemple suivant définit explicitement la partie du dataset à utiliser pour l’apprentissage (training_data) et pour la validation (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'
                            )

Fournir la taille du jeu de données de validation

Quand vous fournissez la taille du jeu de validation, vous fournissez un seul jeu de données pour l’expérience. Le paramètre validation_data n’est pas spécifié et le jeu de données fourni est affecté au paramètre training_data.

Dans votre objet AutoMLConfig, vous pouvez définir le paramètre validation_size pour qu’il contienne une partie des données d’apprentissage pour la validation. Pour cette stratégie, le travail AutoML fractionne le jeu de validation à partir des training_data initiales que vous fournissez. La valeur doit être comprise entre 0,0 et 1,0, à l’exclusion de ces deux valeurs (par exemple, 0,2 signifie que 20 % des données sont réservées pour les données de validation).

Remarque

Dans les scénarios de prévision, le paramètre validation_size n’est pas pris en charge.

L’exemple suivant fournit un seul dataset pour l’expérience. training_data accède au jeu de données complet, et 20 % du jeu de données sont alloués pour la validation (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'
                            )

Effectuer une validation croisée k-fold

Pour effectuer une validation croisée k-fold, vous incluez le paramètre n_cross_validations et vous définissez le nombre de plis. Ce paramètre définit le nombre de validations croisées à effectuer, en fonction du même nombre de plis.

Remarque

Dans les scénarios de classification qui utilisent des réseaux neuronaux profonds (DNN), le paramètre n_cross_validations n’est pas pris en charge.

Pour les scénarios de prévision, consultez l’application de la validation croisée dans Configurer AutoML pour effectuer l’apprentissage d’un modèle de prévision de série chronologique.

L’exemple suivant définit 5 plis pour la validation croisée. Le processus exécute 5 apprentissages différents, chacun utilisant 4/5 des données. Chaque validation utilise 1/5 des données avec un pli de données d’exclusion différent à chaque fois. Par conséquent, les mesures sont calculées avec la moyenne des cinq métriques de validation.

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

Effectuer une validation croisée Monte-Carlo

Pour effectuer une validation croisée Monte-Carlo, vous incluez les paramètres validation_size et n_cross_validations dans votre objet AutoMLConfig.

Pour la validation croisée de Monte-Carlo, Machine Learning automatisé met de côté la partie des données d’entraînement spécifiée par le paramètre validation_size pour la validation, puis affecte le reste des données pour l’entraînement. Ce processus est ensuite répété en fonction de la valeur spécifiée dans le paramètre n_cross_validations, ce qui génère de nouveaux fractionnements d’apprentissage et de validation, de façon aléatoire à chaque fois.

Remarque

Dans les scénarios de prévision, la validation croisée Monte-Carlo n’est pas prise en charge.

L’exemple suivant définit 7 plis pour la validation croisée et 20 % des données d’apprentissage pour la validation. Le processus exécute 5 apprentissages différents, chacun utilisant 80 % des données. Chaque validation utilise 20 % des données avec un pli de données d’exclusion différent à chaque fois.

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

Spécifier des plis de données de validation croisée personnalisés

Vous pouvez également fournir vos propres plis de données de validation croisée (CV). Cette approche est considérée comme étant un scénario plus avancé, car vous spécifiez les colonnes à fractionner et à utiliser pour la validation. Vous incluez des colonnes de fractionnement de validation croisée personnalisées dans vos données d’apprentissage et vous spécifiez les colonnes en indiquant leur nom dans le paramètre cv_split_column_names. Chaque colonne représente un fractionnement de validation croisée et a une valeur entière égale à 1 ou 0. Une valeur 1 indique que la ligne doit être utilisée pour l’apprentissage. Une valeur 0 indique que la ligne doit être utilisée pour la validation.

Remarque

Dans les scénarios de prévision, le paramètre cv_split_column_names n’est pas pris en charge.

L’exemple suivant contient des données marketing du domaine bancaire avec deux colonnes de fractionnement de validation croisée cv1 et 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']
                            )

Remarque

Pour utiliser cv_split_column_names avec training_data et label_column_name, veuillez mettre à niveau votre Kit de développement logiciel (SDK) Python pour Azure Machine Learning version 1.6.0 ou ultérieure. Pour les versions précédentes du Kit de développement logiciel (SDK), consultez l’utilisation de cv_splits_indices, mais notez qu’il est utilisé avec les entrées de jeu de données X et y uniquement.

Définir le calcul de métriques pour la validation croisée

Lorsque la validation croisée k-fold ou Monte Carlo est utilisée, les métriques sont calculées sur chaque pli de validation, puis agrégées. L’opération d’agrégation est une moyenne pour les métriques scalaires et une somme pour les graphiques. Les métriques calculées pendant la validation croisée sont basées sur tous les plis et, par conséquent, sur tous les échantillons du jeu de formation. Pour plus d’informations, consultez Évaluer les résultats d’une expérience AutoML.

Lorsqu’un jeu de validation personnalisé ou un jeu de validation sélectionné automatiquement est utilisé, les métriques d’évaluation du modèle sont calculées uniquement à partir de ce jeu de validation, et non à partir des données de formation.

Fournir un jeu de données de test (préversion)

Important

Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge.

Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Vous pouvez également fournir des données de test pour évaluer le modèle recommandé que l’AutoML génère automatiquement à l’issue de l’expérience. Quand vous fournissez des données de test, elles sont considérées comme étant distinctes des données d’apprentissage et de validation, afin d’empêcher tout effet de biais sur les résultats de l’exécution du test du modèle recommandé. Pour en savoir plus, voir Données de formation, de validation et de test.

Les jeux de données de test doivent se présenter sous la forme d’un Azure Machine Learning TabularDataset. Vous pouvez spécifier un jeu de données de test avec les paramètres test_data et test_size dans votre objet AutoMLConfig. Ces paramètres sont mutuellement exclusifs, et ils ne peuvent pas être spécifiés en même temps ou avec les paramètres cv_split_column_names ou cv_splits_indices.

Dans votre objet AutoMLConfig, utilisez le paramètre test_data pour spécifier un jeu de données existant :

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

Pour utiliser un fractionnement formation/test au lieu de fournir des données de test directement, utilisez le paramètre test_size lors de la création de AutoMLConfig. Ce paramètre doit être une valeur à virgule flottante comprise entre 0,0 et 1,0, à l’exclusion de ces deux valeurs. Il spécifie le pourcentage du jeu de données d’apprentissage à utiliser pour le jeu de données de test.

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

Voici quelques autres considérations relatives à l’utilisation d’un jeu de données de test :

  • Pour les tâches de régression, l’échantillonnage aléatoire est utilisé.
  • Pour les tâches de classification, l’échantillonnage stratifié est utilisé, mais l’échantillonnage aléatoire est utilisé comme solution de secours quand l’échantillonnage stratifié n’est pas possible.

Remarque

Dans les scénarios de prévision, vous ne pouvez pas actuellement spécifier un jeu de données de test en utilisant un fractionnement apprentissage/test avec le paramètre test_size.

Le fait de passer les paramètres test_data ou test_size dans l’objet AutoMLConfig déclenche automatiquement l’exécution d’un test à distance à la fin de votre expérience. Cette série de tests utilise les données de test fournies pour évaluer le meilleur modèle recommandé par l’AutoML. Pour plus d’informations, consultez Obtenir les résultats d’un travail de test.