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 | 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 du vocabulaire, le modèle traite chaque valeur catégorielle possible comme une caractéristique distincte. Pendant l'entraînement, le modèle 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 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 fabricants proposent un nombre limité de couleurs extérieures, car_color
est une caractéristique catégorielle de faible dimension.
L'illustration suivante suggère un vocabulaire (valeurs possibles) pour car_color
:
Exercice : Vérifier vos connaissances
"Red"
n'est pas un nombre à virgule flottante. Vous devez convertir les 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 un numéro d'index unique, comme dans l'illustration suivante :
Après avoir converti les chaînes en numéros d'index uniques, vous devrez traiter les données plus en détail pour les représenter de manière à aider le modèle à apprendre des relations significatives entre les valeurs. Si les données de caractéristiques catégorielles sont laissées sous forme d'entiers indexés et chargées dans un modèle, celui-ci 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 pour créer 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 aura huit éléments. - Dans un vecteur one-hot, un seul élément a la valeur 1.0, et tous les autres ont la valeur 0.0.
Par exemple, le tableau suivant montre l'encodage one-hot pour chaque couleur dans 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 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 dans la représentation du vocabulaire :
Représentation creuse
Une caractéristique dont les valeurs sont principalement nulles (ou vides) est appelée caractéristique creuse. De nombreuses caractéristiques catégorielles, telles que car_color
, ont tendance à être des caractéristiques éparses.
La 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
se trouve à la position 2 (en commençant le décompte à 0), la représentation creuse du vecteur one-hot précédent est la suivante :
2
Notez que la représentation creuse consomme beaucoup moins de mémoire que le vecteur one-hot à huit éléments. Il est important que le modèle soit entraîné sur le 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
contienne non seulement les couleurs populaires, mais aussi des couleurs aberrantes rarement utilisées, telles que "Mauve"
ou "Avocado"
.
Au lieu d'attribuer une catégorie distincte à chacune de ces couleurs aberrantes, vous pouvez les regrouper dans une seule catégorie "fourre-tout" appelée hors vocabulaire (OOV). En d'autres termes, toutes les couleurs aberrantes sont regroupées dans un seul bucket d'aberrations. Le système apprend une seule pondération pour ce bucket de valeurs aberrantes.
Encoder des caractéristiques catégorielles de grande 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étaillés 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 présente deux avantages importants pour les modèles :
- L'entraînement du modèle est généralement plus rapide.
- Le modèle créé infère généralement les prédictions plus rapidement. Autrement dit, le modèle présente une latence plus faible.
Le hachage (également appelé astuce de hachage) est une méthode moins courante pour réduire le nombre de dimensions.