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
:
Exercice: Vérifiez votre compréhension
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:
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:
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 savoir plus sur le hachage