133 votes

Pourquoi un codage à chaud améliore-t-il les performances de l'apprentissage automatique ?

J'ai remarqué que lorsque le codage One Hot est utilisé sur un ensemble de données particulier (une matrice) et utilisé comme données d'entraînement pour des algorithmes d'apprentissage, il donne des résultats nettement meilleurs en ce qui concerne la précision de la prédiction, par rapport à l'utilisation de la matrice originale elle-même comme données d'entraînement. Comment cette augmentation des performances se produit-elle ?

262voto

larsmans Points 167484

De nombreux algorithmes d'apprentissage apprennent soit un seul poids par caractéristique, soit ils utilisent les distances entre les échantillons. Le premier cas est celui des modèles linéaires tels que la régression logistique, qui sont faciles à expliquer.

Supposons que vous ayez un ensemble de données comportant une seule caractéristique catégorielle "nationalité", avec les valeurs "Royaume-Uni", "France" et "États-Unis". Supposons, sans perte de généralité, que ces valeurs sont codées comme 0, 1 et 2. Vous avez alors un poids w pour cette caractéristique dans un classificateur linéaire, qui prendra une sorte de décision basée sur la contrainte w×x + b > 0, ou de manière équivalente w×x < b.

Le problème maintenant est que le poids w ne peut pas coder un choix à trois. Les trois valeurs possibles de w×x sont 0, w et 2×w. Soit ces trois conduisent tous à la même décision (ils sont tous < b ou ≥b), soit "UK" et "French" conduisent à la même décision, soit "French" et "US" donnent la même décision. Il n'y a aucune possibilité pour le modèle d'apprendre que "UK" et "US" devraient recevoir la même étiquette, "French" étant l'intrus.

En utilisant le codage à un coup, vous faites effectivement exploser l'espace des caractéristiques à trois caractéristiques, qui auront chacune leur propre poids, de sorte que la fonction de décision est maintenant w[UK]x[UK] + w[FR]x[FR] + w[US]x[US] < b, où tous les x sont des booléens. Dans cet espace, une telle fonction linéaire peut exprimer n'importe quelle somme/disjonction des possibilités (par exemple "UK ou US", qui pourrait être un prédicteur pour une personne parlant anglais).

De même, tout apprenant basé sur des mesures de distance standard (telles que les k-voisins les plus proches) entre les échantillons sera confus sans codage à un coup. Avec le codage naïf et la distance euclidienne, la distance entre le français et les États-Unis est de 1. La distance entre les États-Unis et le Royaume-Uni est de 2. Mais avec le codage à un coup, les distances par paires entre [1, 0, 0], [0, 1, 0] et [0, 0, 1] sont toutes égales à √2.

Ce n'est pas vrai pour tous les algorithmes d'apprentissage ; les arbres de décision et les modèles dérivés tels que les forêts aléatoires, s'ils sont suffisamment profonds, peuvent traiter des variables catégorielles sans codage à un coup.

4voto

user3764384 Points 41

En ce qui concerne l'augmentation des caractéristiques en effectuant un codage à un coup, on peut utiliser le hachage des caractéristiques. Lorsque vous effectuez un hachage, vous pouvez spécifier que le nombre de godets est bien inférieur au nombre de caractéristiques nouvellement introduites.

0voto

Che Points 333

Lorsque l'on veut prédire des catégories, on veut prédire les éléments d'un ensemble. Ne pas utiliser le codage à un coup revient à laisser les catégories avoir des catégories voisines (par exemple : si vous faites une régression avec les entiers des catégories à la place) organisées d'une certaine manière et dans un certain ordre.

Maintenant, que se passe-t-il si vous attribuez la catégorie 0 à 0, la catégorie 1 à 1 et la catégorie 2 à 2 sans codage à un coup, et que la prédiction de votre algorithme ne sait pas s'il doit choisir 0 ou 2 : doit-il prédire 1 alors qu'il pense que c'est soit 0 soit 2 ?

Tu vois où ça mène. Il en va de même pour vos entrées de données : si elles ne sont pas censées être voisines, ne les présentez pas à votre algorithme comme telles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X