Pourquoi un encodage à chaud améliore-t-il les performances d'apprentissage automatique?

127

J'ai remarqué que lorsque l'encodage One Hot est utilisé sur un ensemble de données particulier (une matrice) et utilisé comme données d'entraînement pour l'apprentissage d'algorithmes, 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 d'origine elle-même comme données d'entraînement. Comment cette augmentation des performances se produit-elle?

maheshakya
la source

Réponses:

260

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

Supposons que vous ayez un ensemble de données n'ayant qu'une seule caractéristique catégorielle «nationalité», avec les valeurs «UK», «French» et «US». Supposons, sans perte de généralité, que ceux-ci sont codés 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 voies. Les trois valeurs possibles de w × x sont 0, w et 2 × w. Soit ces trois éléments mènent tous à la même décision (ils sont tous <b ou ≥b), soit "UK" et "French" conduisent à la même décision, ou "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 avoir la même étiquette, avec "French" le plus étrange.

Avec un encodage à chaud, vous agrandissez efficacement l'espace des fonctionnalités en trois fonctionnalités, qui auront chacune leur propre poids, donc la fonction de décision est désormais 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 toute somme / disjonction des possibilités (par exemple «UK or US», qui pourrait être un prédicteur pour quelqu'un 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 encodage one-hot. 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 one-hot, les distances par paire entre [1, 0, 0], [0, 1 , 0] et [0, 0, 1] sont tous égaux à √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 gérer des variables catégorielles sans encodage one-hot.

Fred Foo
la source
4
Merci pour cela Lars, mais lorsque nous faisons un OneHotEncoding qui augmente effectivement le nombre de fonctionnalités, n'avons-nous pas besoin d'augmenter les échantillons aussi, pour nous assurer qu'il ne sur-ajustement pas.
Manoj le
@Manoj Par rapport à la représentation alternative évidente des variables catégorielles, codant chaque niveau comme un entier distinct, je ne pense pas que cela compte: vous avez besoin de statistiques suffisantes de toute façon.
Fred Foo
7
Y a-t-il de la littérature que vous pourriez citer pour que je puisse en savoir plus? Merci.
Dr.Knowitall
1
Y a-t-il un avantage à utiliser une matrice de rang moins que complet (ce que vous ne feriez pas lors de la création d'un modèle statistique régulier) lors de l'utilisation de techniques d'apprentissage automatique telles que le boosting?
Steve S
2
Cela me ressemble exactement à ce qu'un statisticien appellerait des «variables factices». Mais peut-être y a-t-il une économie d'espace de stockage.
Soldalma le
3

En ce qui concerne l'augmentation des fonctionnalités en effectuant un encodage à chaud, on peut utiliser le hachage de fonctionnalités. Lorsque vous effectuez un hachage, vous pouvez spécifier que le nombre de compartiments est bien inférieur au nombre de fonctionnalités nouvellement introduites.

user3764384
la source
0

Lorsque vous souhaitez prédire des catégories, vous souhaitez prédire les éléments d'un ensemble. Ne pas utiliser le codage one-hot revient à laisser les catégories avoir des catégories voisines (par exemple: si vous avez fait 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 encodage one-hot, et que la prédiction de votre algorithme n'est pas sûre de choisir 0 ou 2: devrait-il prédire 1 malgré il pense que c'est 0 ou 2?

Vous voyez où ça va. Il en va de même pour vos entrées de données: si elles ne doivent pas être supposées être voisines, ne les montrez pas à votre algorithme en tant que voisines.

Guillaume Chevalier
la source