Données catégorielles: vocabulaire et encodage one-hot

Le terme dimension est synonyme du nombre d'éléments dans un vecteur de caractéristiques. Certaines caractéristiques catégorielles sont de faible dimension. Exemple :

Nom de la fonctionnalité # catégories Exemples de catégories
snowed_today 2 True, False
skill_level 3 Débutant, Professionnel, Expert
season 4 Hiver, printemps, été, automne
day_of_week 7 Lundi, mardi, mercredi
planète 8 Mercure, Vénus, Terre

Lorsqu'une caractéristique catégorielle comporte un faible nombre de catégories possibles, vous pouvez l'encoder en tant que vocabulaire. Avec un encodage de vocabulaire, le modèle traite chaque valeur catégorielle possible comme une fonction distincte. Pendant l'entraînement, le modèle apprend des pondérations différentes pour chaque catégorie.

Par exemple, supposons que vous créiez un modèle pour prédire le prix d'une voiture en fonction, en partie, d'une caractéristique catégorielle nommée car_color. Peut-être que les voitures rouges valent plus que les voitures vertes. Étant donné que les constructeurs proposent un nombre limité de couleurs extérieures, car_color est une caractéristique catégorielle à faible dimension. L'illustration suivante suggère un vocabulaire (valeurs possibles) pour car_color:

Figure 1. Chaque couleur de la palette est représentée en tant que caractéristique distincte. Autrement dit, chaque couleur est une caractéristique distincte dans le vecteur de caractéristiques.
      Par exemple, "Rouge" est une fonctionnalité, "Orange" est une fonctionnalité distincte, et ainsi de suite.
Image 1. Une caractéristique unique pour chaque catégorie.

Exercice: Vérifiez votre compréhension

Vrai ou faux: Un modèle de machine learning peut s'entraîner directement sur des valeurs de chaîne brutes, comme "Rouge" et "Noir", sans convertir ces valeurs en vecteurs numériques.
Vrai
Faux

Numéros d'index

Les modèles de machine learning ne peuvent manipuler que des nombres à virgule flottante. Vous devez donc convertir chaque chaîne en numéro d'index unique, comme illustré ci-dessous:

Figure 2. Chaque couleur est associée à une valeur entière unique. Par exemple, "Rouge" est associé à l'entier 0, "Orange" à l'entier 1, etc.
Figure 2 : Éléments indexés

Après avoir converti les chaînes en numéros d'index uniques, vous devez traiter davantage les données pour les représenter de manière à aider le modèle à apprendre des relations significatives entre les valeurs. Si les données de la caractéristique catégorielle sont laissées sous forme d'entiers indexés et chargées dans un modèle, le modèle traitera les valeurs indexées comme des nombres à virgule flottante continus. Le modèle considérerait alors que "violet" est six fois plus probable que "orange".

Encodage one-hot

L'étape suivante de la création d'un vocabulaire consiste à convertir chaque numéro d'index en encodage one-hot. Dans un encodage one-hot:

  • Chaque catégorie est représentée par un vecteur (tableau) de N éléments, où N est le nombre de catégories. Par exemple, si car_color comporte huit catégories possibles, le vecteur one-hot qui le représente comportera huit éléments.
  • Un seul élément d'un vecteur one-hot a la valeur 1,0. Tous les autres éléments ont la valeur 0,0.

Par exemple, le tableau suivant montre l'encodage one-hot pour chaque élément de car_color:

Fonctionnalité Rouge Orange Bleu Jaune Vert Noir Violet Brown
"Rouge" 1 0 0 0 0 0 0 0
"Orange" 0 1 0 0 0 0 0 0
"Blue" 0 0 1 0 0 0 0 0
"Jaune" 0 0 0 1 0 0 0 0
"Vert" 0 0 0 0 1 0 0 0
"Noir" 0 0 0 0 0 1 0 0
"Violet" 0 0 0 0 0 0 1 0
"Brown" 0 0 0 0 0 0 0 1

C'est le vecteur one-hot, et non la chaîne ni le numéro d'index, qui est transmis au vecteur de caractéristiques. Le modèle apprend une pondération distincte pour chaque élément du vecteur de caractéristiques.

L'illustration suivante suggère les différentes transformations de la représentation du vocabulaire:

Figure 3. Schéma du processus de mappage des catégories aux vecteurs de caractéristiques. Dans le diagramme, les éléments d'entrée sont "Yellow" (Jaune), "Orange" (Orange), "Blue" (Bleu) et "Blue" (Bleu) une seconde fois.  Le système utilise un vocabulaire stocké ("Rouge" correspond à 0, "Orange" à 1, "Bleu" à 2, "Jaune" à 3, etc.) pour mapper la valeur d'entrée à un ID. Ainsi, le système mappe "Yellow", "Orange", "Blue" et "Blue" sur 3, 1, 2 et 2. Le système convertit ensuite ces valeurs en vecteur de caractéristiques one-hot. Par exemple, pour un système avec huit couleurs possibles, 3 devient 0, 0, 0, 1, 0, 0, 0, 0.
Figure 3 : Processus de mappage des catégories aux vecteurs d'éléments

Représentation creuse

Une caractéristique dont les valeurs sont principalement nulles (ou vides) est appelée caractéristique sporadique. De nombreuses caractéristiques catégorielles, telles que car_color, ont tendance à être des caractéristiques peu denses. La représentation sporadique consiste à stocker la position de 1,0 dans un vecteur sporadique. Par exemple, le vecteur one-hot pour "Blue" est le suivant:

[0, 0, 1, 0, 0, 0, 0, 0]

Étant donné que 1 se trouve à la position 2 (lorsque le comptage commence à 0), la représentation sporadique du vecteur one-hot précédent est la suivante:

2

Notez que la représentation sparse consomme beaucoup moins de mémoire que le vecteur one-hot à huit éléments. Il est important que le modèle s'entraîne sur le vecteur one-hot, et non sur la représentation sparse.

Valeurs aberrantes dans les données catégorielles

Comme les données numériques, les données catégorielles contiennent également des valeurs aberrantes. Supposons que car_color ne contienne pas seulement les couleurs populaires, mais également des couleurs inhabituelles rarement utilisées, telles que "Mauve" ou "Avocado". Plutôt que d'attribuer une catégorie distincte à chacune de ces couleurs aberrantes, vous pouvez les regrouper dans une catégorie "fourre-tout" appelée hors vocabulaire (OOV). En d'autres termes, toutes les couleurs d'écarts sont regroupées dans un seul bucket d'écarts. Le système apprend une seule pondération pour ce bucket d'écarts.

Encodage des caractéristiques catégorielles haute dimensionnelles

Certaines caractéristiques catégorielles comportent un grand nombre de dimensions, comme celles du tableau suivant:

Nom de la fonctionnalité # catégories Exemples de catégories
words_in_english ~500 000 "happy", "walking"
US_postal_codes ~42 000 "02114", "90301"
last_names_in_Germany ~850 000 "Schmidt", "Schneider"

Lorsque le nombre de catégories est élevé, l'encodage one-hot est généralement un mauvais choix. Les embeddings, décrits dans un module d'embeddings distinct, sont généralement un bien meilleur choix. Les embeddings réduisent considérablement le nombre de dimensions, ce qui est bénéfique pour les modèles de deux manières importantes:

  • L'entraînement du modèle est généralement plus rapide.
  • Le modèle créé infère généralement des prédictions plus rapidement. Autrement dit, la latence du modèle est plus faible.

Le hachage (également appelé astuce de hachage) est un moyen moins courant de réduire le nombre de dimensions.

En résumé, le hachage met en correspondance une catégorie (par exemple, une couleur) avec un petit entier, le numéro du "bucket" qui contiendra cette catégorie.

Plus précisément, vous implémentez un algorithme de hachage comme suit:

  1. Définissez le nombre de bacs dans le vecteur de catégories sur N, où N est inférieur au nombre total de catégories restantes. Prenons un exemple arbitraire : N = 100.
  2. Choisissez une fonction de hachage. (Vous devrez souvent également choisir la plage de valeurs de hachage.)
  3. Transmettez chaque catégorie (par exemple, une couleur particulière) à cette fonction de hachage, générant une valeur de hachage, par exemple 89237.
  4. Attribuez à chaque bin un numéro d'index de la valeur de hachage de sortie modulo N. Dans ce cas, où N est égal à 100 et que la valeur de hachage est 89237, le résultat modulo est 37, car 89237 % 100 est égal à 37.
  5. Créez un codage en one-hot pour chaque bin avec ces nouveaux numéros d'index.

Pour en savoir plus sur le hachage des données, consultez la section Randomisation du module Systèmes de machine learning en production.