Je construis des modèles avec des données catégoriques depuis un certain temps et lorsque, dans cette situation, je par défaut utilise par défaut la fonction LabelEncoder de scikit-learn pour transformer ces données avant de créer un modèle.
Je comprends la différence entre OHE
, LabelEncoder
et DictVectorizor
en termes de ce qu'ils font pour les données, mais ce n'est pas clair pour moi est quand vous pouvez choisir d'employer une technique sur une autre.
Existe-t-il certains algorithmes ou situations dans lesquels l’un présente des avantages / inconvénients par rapport aux autres?
Réponses:
Il y a des cas où LabelEncoder ou DictVectorizor sont utiles, mais ceux-ci sont assez limités à mon avis en raison de l'ordinalité.
LabelEncoder peut transformer [chien, chat, chien, souris, chat] en [1,2,1,3,2], mais ensuite, l'ordinalité imposée signifie que la moyenne du chien et de la souris est chat. Il existe néanmoins des algorithmes tels que des arbres de décision et des forêts aléatoires qui fonctionnent parfaitement avec des variables catégorielles et LabelEncoder peut être utilisé pour stocker des valeurs en utilisant moins d'espace disque.
One-Hot-Encoding a l'avantage que le résultat est binaire plutôt qu'ordinal et que tout se trouve dans un espace vectoriel orthogonal. L'inconvénient est que, pour une cardinalité élevée, l'espace des fonctions peut vraiment exploser rapidement et que vous commencez à vous battre avec la malédiction de la dimensionnalité. Dans ces cas, j'utilise typiquement un codage à chaud suivi de PCA pour la réduction de la dimensionnalité. Je trouve que la combinaison judicieuse de PCA one-hot plus peut rarement être battue par d'autres schémas de codage. La PCA trouve le chevauchement linéaire et a donc naturellement tendance à regrouper les caractéristiques similaires dans la même caractéristique.
la source
Bien que l' AN6U5 ait donné une très bonne réponse, je voulais ajouter quelques points pour référence future. Lors de l'examen de One Hot Encoding (OHE) et de l' encodage d'étiquette , nous devons essayer de comprendre le modèle que vous essayez de créer. À savoir, les deux catégories de modèles que nous allons examiner sont les suivantes:
Voyons quand appliquer OHE et quand appliquer l'encodage d'étiquette lors de la création de modèles basés sur des arbres.
Nous appliquons OHE lorsque:
Nous appliquons le codage d'étiquette lorsque:
Si vous souhaitez continuer avec OHE, comme @ AN6U5 l'a suggéré, vous pouvez combiner PCA avec OHE.
Permet de déterminer quand appliquer OHE et le codage d'étiquette lors de la création de modèles non basés sur des arbres.
Pour appliquer l'encodage d'étiquette, la dépendance entre entité et cible doit être linéaire pour que l'encodage d'étiquette soit utilisé efficacement.
De même, si la dépendance est non linéaire, vous pouvez utiliser OHE pour la même chose.
Remarque: Une partie de l'explication a été référencée dans Comment gagner un concours de science des données de Coursera.
la source
LabelEncoder est destiné aux données ordinales, tandis que OHE est destiné aux données nominales.
la source