Référence des transformations de données - Amazon Machine Learning

Nous ne mettons plus à jour le service Amazon Machine Learning et n'acceptons plus de nouveaux utilisateurs pour ce service. Cette documentation est disponible pour les utilisateurs existants, mais nous ne la mettons plus à jour. Pour plus d'informations, veuillez consulter la rubriqueQu'est-ce qu'Amazon Machine Learning.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Référence des transformations de données

Transformation n-gramme

La transformation n-gramme accepte une variable texte comme entrée et génère des chaînes correspondant au glissement d'une fenêtre de n mots (configurable par l'utilisateur), en générant des résultats au cours de ce processus. Par exemple, considérez la chaîne de texte « I really enjoyed reading this book » (J'ai vraiment apprécié la lecture de ce livre).

La transformation n-gramme paramétrée avec une taille de fenêtre de 1 vous donne simplement tous les mots individuels figurant dans cette chaîne :

{"I", "really", "enjoyed", "reading", "this", "book"}

La transformation n-gramme paramétrée avec une taille de fenêtre de 2 vous donne toutes les combinaisons de deux mots, ainsi que les mots individuels :

{"I really", "really enjoyed", "enjoyed reading", "reading this", "this book", "I", "really", "enjoyed", "reading", "this", "book"}

La transformation n-gramme paramétrée avec une taille de fenêtre de 3 ajoute les combinaisons à 3 mots à cette liste, et donne le résultat suivant :

{"I really enjoyed", "really enjoyed reading", "enjoyed reading this", "reading this book", "I really", "really enjoyed", "enjoyed reading", "reading this", "this book", "I", "really", "enjoyed", "reading", "this", "book"}

Vous pouvez demander des n-grammes avec une taille allant de 2 à 10 mots. Les n-grammes de taille 1 sont générés implicitement pour toutes les entrées dont le type est marqué en tant que texte dans le schéma de données, de sorte que vous n'avez pas à les demander. Enfin, souvenez-vous que les n-grammes sont générés en divisant les données d'entrée au niveau des espaces. Cela signifie que, par exemple, les caractères de ponctuation sont considérés comme faisant partie des jetons : la création de n-grammes avec une fenêtre de taille 2 pour la chaîne « rouge, vert, bleu » donne {"rouge,", "vert,", "bleu,", "rouge, vert", "vert, bleu"}. Vous pouvez utiliser le processeur de suppression de ponctuation (décrit plus loin dans ce document) pour supprimer les symboles de ponctuation si vous n'en voulez pas.

Pour calculer les n-grammes de la variable var1 pour une taille de fenêtre de 3 :

"ngram(var1, 3)"

Transformation bigramme d'analyse orthogonale (OSB, Orthogonal Sparse Bigram)

La transformation OSB a pour but de contribuer à l'analyse des chaînes de texte et constitue une alternative à la transformation bigramme (n-gramme avec une taille de fenêtre de 2). Les OSB sont générés en faisant glisser la fenêtre de taille n sur le texte et en fournissant en sortie chaque paire de mots qui inclut le premier mot de la fenêtre.

Pour élaborer un OSB, les mots le constituant sont joints par le caractère « _ » (trait de soulignement) et chaque jeton ignoré est indiqué par l'ajout d'un autre trait de soulignement dans l'OSB. Ainsi, l'OSB ne code pas seulement les jetons visibles au sein d'une fenêtre, mais fournit aussi une indication du nombre de jetons ignorés dans cette même fenêtre.

Pour illustrer cela, considérez la chaîne « The quick brown fox jumps over the lazy dog » (Le rapide renard brun saute par-dessus le chien fainéant) et des OSB de taille 4. Les quatre fenêtres de six mots, et les deux dernières fenêtres plus courtes à partir de la fin de la chaîne sont indiquées dans l'exemple suivant, ainsi que les OSB générés à partir de chaque :

Fenêtre, {OSB générés}

"The quick brown fox", {The_quick, The__brown, The___fox} "quick brown fox jumps", {quick_brown, quick__fox, quick___jumps} "brown fox jumps over", {brown_fox, brown__jumps, brown___over} "fox jumps over the", {fox_jumps, fox__over, fox___the} "jumps over the lazy", {jumps_over, jumps__the, jumps___lazy} "over the lazy dog", {over_the, over__lazy, over___dog} "the lazy dog", {the_lazy, the__dog} "lazy dog", {lazy_dog}

Les bigrammes d'analyse orthogonale constituent une alternative aux n-grammes et sont susceptibles de mieux fonctionner dans certaines situations. Si vos données contiennent de grands champs textuels (10 mots ou plus), faites des expériences pour voir ce qui convient le mieux. Notez que la qualification « grand champ textuel » peut varier en fonction de la situation. Toutefois, avec des champs textuels plus grands, les OSB ont été présentés de façon empirique pour représenter de façon unique le texte, en raison du symbole spécial servant à ignorer (le trait de soulignement).

Vous pouvez demander une taille de fenêtre de 2 à 10 pour les transformations OSB sur des variables de texte en entrée.

Pour calculer les OSB de la variable var1 pour une taille de fenêtre de 5 :

"osb(var1, 5)"

Transformation en minuscules

Le processeur de transformation en minuscules convertit les entrées de texte en minuscules. Par exemple, avec les données d'entrée « The Quick Brown Fox Jumps Over the Lazy Dog », le processeur fournit en sortie « the quick brown fox jumps over the lazy dog ».

Pour appliquer une transformation en minuscules à la variable var1 :

"lowercase(var1)"

Transformation de suppression de la ponctuation

Amazon ML fractionne implicitement les entrées marquées en tant que texte dans le schéma de données au niveau des espaces. La ponctuation figurant dans la chaîne finit soit scindée aux jetons, soit considérée comme des jetons à part entière, en fonction des espaces qui l'entourent. Si ce n'est pas ce que vous souhaitez, vous pouvez utiliser la transformation de suppression de la ponctuation pour supprimer les symboles de ponctuation des entités générées. Par exemple, dans le cas de la chaîne « Welcome to AML - please fasten your seat-belts! », l'ensemble de jetons suivant est généré implicitement :

{"Welcome", "to", "Amazon", "ML", "-", "please", "fasten", "your", "seat-belts!"}

L'application du processeur de suppression de la ponctuation à cette chaîne fournit l'ensemble suivant :

{"Welcome", "to", "Amazon", "ML", "please", "fasten", "your", "seat-belts"}

Notez que seuls les signes de ponctuation en préfixe ou en suffixe sont supprimés. La ponctuation qui figure au milieu d'un jeton, par exemple, le trait d'union dans « seat-belts », n'est pas supprimée.

Pour appliquer la suppression de la ponctuation à la variable var1 :

"no_punct(var1)"

Transformation de discrétisation par quantiles

Le processeur de discrétisation par quantiles accepte deux entrées, une variable numérique et un paramètre appelé nombre d'intervalles, et génère en sortie une variable de catégorie. L'objectif est de découvrir une non-linéarité dans la distribution de la variable en regroupant les valeurs observées.

Dans de nombreux cas, la relation entre une variable numérique et la cible n'est pas linéaire (la valeur de la variable numérique n'augmente pas et ne diminue pas de façon monotone avec la cible). Dans de tels cas, il peut être utile de discrétiser l'entité numérique en une entité de catégorie représentant différentes plages de l'entité numérique. Chaque valeur d'entité de catégorie (intervalle) peut ensuite être modélisée comme ayant sa propre relation linéaire avec la cible. Par exemple, supposons que vous savez que l'entité numérique continue account_age (âge du compte) n'est pas corrélée linéairement à la probabilité d'acheter un livre. Vous pouvez discrétiser l'âge en entités de catégorie susceptibles de capturer plus précisément la relation avec la cible.

Le processeur de discrétisation par quantiles peut être utilisé pour demander à Amazon ML d'établir n intervalles de taille égale sur la distribution de toutes les valeurs d'entrée de la variable d'âge, puis de remplacer chaque nombre par un jeton textuel contenant l'intervalle. Le nombre optimal d'intervalles pour une variable numérique dépend des caractéristiques de la variable et de sa relation à la cible, et la meilleure façon de le déterminer passe par l'expérimentation. Amazon ML suggère le nombre optimal d'intervalles pour une entité numérique en fonction des statistiques des données figurant dans la recette suggérée.

Vous pouvez demander le calcul d'entre 5 et 1 000 intervalles pour n'importe quelle variable numérique en entrée.

L'exemple suivant montre comment calculer et utiliser 50 intervalles à la place de la variable numérique var1 :

"quantile_bin(var1, 50)"

Transformation de normalisation

Le transformateur de normalisation normalise les variables numériques pour obtenir une moyenne de 0 et une variance égale à 1. La normalisation des variables numériques peut aider le processus d'apprentissage s'il existe de très grandes différences de plages entre les variables numériques, car les variables de grandeur la plus élevée pourraient dominer le modèle d'apprentissage-machine, que l'entité apporte ou non des informations sur la cible.

Pour appliquer cette transformation à la variable numérique var1, ajoutez ce qui suit à la recette :

normalize(var1)

Ce transformateur peut également accepter un groupe défini par l'utilisateur de variables numériques ou le groupe prédéfini pour toutes les variables numériques (ALL_NUMERIC) comme entrée :

normalize(ALL_NUMERIC)

Remarque

Il n'est pas obligatoire d'utiliser le processeur de normalisation pour les variables numériques.

Transformation par produit cartésien

La transformation cartésienne génère des permutations d'au moins deux variables d'entrée de texte ou de catégorie. Cette transformation est utilisée lorsqu'une interaction entre les variables est suspectée. Par exemple, considérez le jeu de données marketing bancaire utilisé dans Didacticiel : Utilisation d'Amazon ML pour prédire les réponses à une offre marketing. Avec ce jeu de données, nous aimerions prédire si une personne répondra positivement à une promotion de sa banque, en fonction des informations économiques et démographiques. Nous soupçonnons éventuellement que le type de travail de la personne joue également un rôle (il existe peut-être une corrélation entre le fait d'être employé dans certains domaines et d'avoir des économies disponibles), et le niveau le plus élevé de formation atteint est également important. Nous pouvons aussi avoir une intuition plus profonde qu'il existe un signal fort dans l'interaction de ces deux variables ; par exemple, que la promotion est particulièrement adaptée aux clients qui sont des entrepreneurs ayant obtenu un diplôme universitaire.

La transformation par produit cartésien accepte des variables de catégorie ou du texte en entrée, et génère de nouvelles entités qui capturent l'interaction entre ces variables d'entrée. En particulier, pour chaque exemple de formation, elle crée une combinaison d'entités et les ajoute en tant qu'entité autonome. Par exemple, supposons que nos lignes d'entrée simplifiées ressemblent à ceci :

target, education, job

0, university.degree, technician

0, high.school, services

1, university.degree, admin

Si nous spécifions que la transformation cartésienne doit être appliquée aux champs education et job des variables de catégorie, l'entité obtenue education_job_interaction ressemblera à ceci :

target, education_job_interaction

0, university.degree_technician

0, high.school_services

1, university.degree_admin

La transformation cartésienne est encore plus puissante quand il s'agit de travailler sur des séquences de jetons, comme c'est le cas lorsque l'un de ses arguments est une variable de texte fractionnée implicitement ou explicitement en jetons. Par exemple, considérez la tâche consistant à classer un livre comme manuel ou non. Intuitivement, nous pouvons penser que des éléments du titre peuvent nous indiquer s'il s'agit d'un manuel (certains mots peuvent apparaître plus fréquemment dans les titres des manuels), et nous pouvons également croire que certaines caractéristiques de la reliure du livre peuvent être prédictives (les manuels ont plus de chances d'être reliés [Hardcover] que d'avoir une couverture souple [Softcover]), mais c'est vraiment la combinaison de certains mots du titre et de la reliure qui est la plus prédictive. Comme exemple concret, le tableau suivant montre les résultats de l'application du processeur cartésien aux variables d'entrée Binding (reliure) et Title (titre) :

Manuel Title Binding Produit cartésien de no_punct(Title) et Bindind
1 Economie : Principes, Problems, Policies Hardcover {"Economics_Hardcover", "Principles_Hardcover", "Problems_Hardcover", "Policies_Hardcover"}
0 The Invisible Heart : An Economics Romance Softcover {"The_Softcover", "Invisible_Softcover", "Heart_Softcover", "An_Softcover", "Economics_Softcover", "Romance_Softcover"}
0 Fun With Problems Softcover {"Fun_Softcover", "With_Softcover", "Problems_Softcover"}

L'exemple suivant montre comment appliquer le transformateur cartésien à var1 et var2 :

cartesian(var1, var2)