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é | Nombre 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 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 partie, à partir 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
:
Exercice : Vérifier votre intuition
"Red"
n'est pas un nombre à virgule flottante. Vous devez convertir des chaînes telles que "Red"
en nombres à virgule flottante.
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 :
Exercice : Vérifier votre intuition
"Black"
(numéro d'index 5) est cinq fois plus pertinent pour le modèle que "Orange"
(numéro d'index 1).
"Black"
(numéro d'index 5) est cinq fois plus significatif pour le modèle que "Orange"
(numéro d'index 1).
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 représentant aura 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 :
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 de noter que le modèle doit s'entraîner sur un vecteur one-hot, et non sur la représentation creuse.
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 dimension
Certaines caractéristiques catégorielles comportent un grand nombre de dimensions, comme celles du tableau suivant :
Nom de la fonctionnalité | Nombre de 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 représentations vectorielles continues réduisent considérablement le nombre de dimensions, ce qui profite aux 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.