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 ?
Réponses
Trop de publicités?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.
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.