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

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

Nom de la fonctionnalité Nbre de catégories Exemples de catégories
snowed_today 2 Vrai, faux
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 a un faible nombre de catégories possibles, vous pouvez l'encoder sous forme de vocabulaire. Avec un encodage de vocabulaire, le modèle traite chaque valeur catégorielle possible en tant que caractéristique distincte. Pendant l'entraînement, apprend différentes pondérations pour chaque catégorie.

Par exemple, supposons que vous créez un modèle pour prédire le prix d'une voiture, en partie, sur 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 fabricants proposent un nombre limité de couleurs d'extérieur, car_color est une caractéristique catégorielle de 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 sous la forme
      . Autrement dit, chaque couleur est une caractéristique distincte dans le vecteur de caractéristiques.
      Par exemple, "Rouge". est une caractéristique, "Orange" est une fonctionnalité distincte,
      et ainsi de suite.
Image 1. Une caractéristique unique pour chaque catégorie.

Exercice: testez votre intuition

Vrai ou faux: un modèle de machine learning peut être entraîné directement sur valeurs de chaîne brutes, telles que "Red" et "Black", sans convertir ces valeurs en vecteurs numériques.
Vrai
Pendant l'entraînement, un modèle ne peut manipuler que des nombres à virgule flottante. La chaîne "Red" n'est pas un nombre à virgule flottante. Toi doit convertir des chaînes telles que "Red" en nombres à virgule flottante.
Faux
Un modèle de machine learning ne peut être entraîné qu'avec des caractéristiques des valeurs à virgule flottante, vous devrez donc convertir ces chaînes en les valeurs à virgule flottante avant l'entraînement.

Indexer des nombres

Les modèles de machine learning ne peuvent manipuler que les nombres à virgule flottante. Vous devez donc convertir chaque chaîne en un numéro d'index unique, comme dans l'illustration suivante:

Figure 2. Chaque couleur est associée à un nombre entier unique. Pour
      exemple, "Rouge" est associé à l'entier 0, "Orange" avec le
      l'entier 1, etc.
Figure 2 : Les caractéristiques indexées.

Testez votre intuition

Votre modèle peut-il être entraîné directement sur les index indiqués ? de la figure 2 ?
Oui
Si le modèle est entraîné sur les chiffres d'index, traiter chacune d'elles comme une valeur numérique et considérer La valeur "Black" (index numéro 5) est cinq fois plus significative. au modèle que "Orange" (index numéro 1).
Non
Votre modèle ne doit pas être entraîné sur les nombres d'index. Si c'est le cas, votre modèle traitera chaque numéro d'index comme une valeur numérique et considérez que "Black" (index numéro 5) est 5 fois plus significatif pour le modèle que "Orange" (index numéro 1).

Encodage one-hot

L'étape suivante de la création d'un vocabulaire consiste à convertir chaque numéro d'index en son 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 correspond au nombre de catégories. Par exemple, si car_color a huit valeurs possibles le vecteur one-hot représentant aura huit éléments.
  • Un des éléments d'un vecteur one-hot a la valeur 1,0. tous les éléments restants ont la valeur 0.0.

Par exemple, le tableau suivant montre l'encodage one-hot de chaque valeur 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
"Bleu" 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
"Marron" 0 0 0 0 0 0 0 1

C'est le vecteur one-hot (et non la chaîne ou 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 de le vecteur de caractéristiques.

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

Figure 3. Diagramme du processus de bout en bout permettant de mapper les catégories à
      des vecteurs de caractéristiques. Dans le diagramme, les caractéristiques d'entrée sont "Jaune",
      "Orange", "Bleu" et "Bleu" une deuxième fois.  Le système utilise un
      vocabulaire ("Rouge" correspond à 0, "Orange" à 1, "Bleu à 2", "Jaune" à 3 et
      etc.) pour mapper la valeur d'entrée à un ID. Ainsi, le système mappe le jaune,
      "Orange", "Bleu" et "Bleu" à 3, 1, 2, 2. Le système convertit ensuite
      ces valeurs dans un 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 bout en bout permettant de mapper des catégories à des vecteurs de caractéristiques.

Représentation creuse

Une caractéristique dont les valeurs sont pour la plupart nulles (ou vides) est appelée caractéristique creuse. Beaucoup les caractéristiques catégorielles, comme car_color, ont tendance à être des caractéristiques creuses. Représentation creuse consiste à stocker la position de la valeur 1,0 dans un vecteur creux. Par exemple, le vecteur one-hot pour "Blue" est le suivant:

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

Étant donné que 1 est en position 2 (lorsque le décompte commence à 0), la La représentation creuse du vecteur one-hot précédent est:

2

Notez que la représentation creuse utilise beaucoup moins de mémoire que la un vecteur one-hot à huit éléments. Il est important de noter que le modèle doit être entraîné un vecteur one-hot, et non la représentation creuse.

Anomalies dans les données catégorielles

Tout comme les données numériques, les données catégorielles contiennent également des anomalies. Supposons car_color contient non seulement les couleurs populaires, mais aussi certaines rarement utilisées. les couleurs aberrantes, telles que "Mauve" ou "Avocado". Plutôt que de donner à chacune de ces couleurs aberrantes une catégorie distincte, vous vous pouvez les regrouper en un seul une catégorie appelée "hors vocabulaire" hors champ. En d'autres termes, toutes les couleurs aberrantes sont réparties dans une seule un bucket aberrant. Le système apprend une seule pondération pour ce bucket d'anomalies.

Encodage des caractéristiques catégorielles de grande dimension

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

Nom de la fonctionnalité Nbre de catégories Exemples de catégories
words_in_english ~500 000 "heureux", "marche"
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. Représentations vectorielles continues, détaillées dans un dans le module de représentations vectorielles continues, un bien meilleur choix. Les représentations vectorielles continues réduisent considérablement le nombre de dimensions, ce qui profite aux modèles de deux manières:

  • En général, l'entraînement du modèle est plus rapide.
  • En général, le modèle compilé déduit les prédictions plus rapidement. En d'autres termes, a une latence plus faible.

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