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
Un espace de travail Azure Machine Learning. Pour créer l’espace de travail, consultez Créer des ressources d’espace de travail.
Une connaissance de base en matière de configuration d’une expérience AutoML avec le Kit de développement logiciel (SDK) Azure Machine Learning. Pour voir les modèle fondamentaux de conception d’expériences de Machine Learning automatisé, suivez le tutoriel Entraîner un modèle de détection d’objet ou le guide Configurer l’apprentissage AutoML avec Python.
Une compréhension des fractionnements de données de formation et de validation et de la validation croisée en tant que concepts de Machine Learning. Pour une explication générale, consultez les articles suivants :
Important
Les commandes python de cet article requièrent la dernière azureml-train-automl
version du package.
- Installez le dernier package
azureml-train-automl
dans votre environnement local. - Pour plus d’informations sur le dernier package
azureml-train-automl
, consultez les notes de publication.
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ètren_cross_validations
, mais pas les deux. - Quand vous utilisez le paramètre
validation_data
, vous devez aussi spécifier les paramètrestraining_data
etlabel_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.
Avertissement
La fonctionnalité de jeu de données de test n’est pas disponible pour les scénarios AutoML suivants :
- Tâches de vision par ordinateur
- Modèles multiples et séries chronologiques hiérarchiques – Apprentissage pour la prévision (préversion)
- Tâches de prévision pour lesquelles le deep learning des réseaux neuronaux (DNN) est activé
- Exécution du ML automatisé à partir de calculs locaux ou de clusters Azure Databricks
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.