J'ai des données brutes qui ont environ 20 colonnes (20 fonctionnalités). Dix d'entre elles sont des données continues et 10 d'entre elles sont catégoriques. Certaines des données catégorielles peuvent avoir comme 50 valeurs différentes (États-Unis). Après avoir prétraité les données, les 10 colonnes continues deviennent 10 colonnes préparées et les 10 valeurs catégorielles deviennent comme 200 variables codées à chaud. Je crains que si je mets toutes ces fonctionnalités 200 + 10 = 210 dans le réseau neuronal, les fonctionnalités 200-one-hot (les 10 colonnes catégorielles) domineront totalement les fonctionnalités 10-continues.
Une méthode serait peut-être de «regrouper» les colonnes ou quelque chose. Est-ce une préoccupation valable et existe-t-il un moyen standard de traiter ce problème?
(J'utilise Keras, bien que je ne pense pas que cela ait beaucoup d'importance.)
Réponses:
Vous pouvez encoder les variables catégorielles avec une méthode différente de one-hot. Les encodeurs binaires ou de hachage peuvent être appropriés dans ce cas. Le hachage en particulier est agréable car vous encodez toutes les catégories en une seule représentation par vecteur d'entité, donc aucune ne domine l'autre. Vous pouvez également spécifier la taille de la représentation finale, vous pouvez donc hacher toutes les variables catégorielles en 10 entités et vous retrouver avec 20 entités numériques (moitié continue, moitié catégorielle).
Les deux sont implémentés dans https://github.com/scikit-learn-contrib/categorical-encoding , ou assez simples pour vous implémenter.
la source
Vous pouvez utiliser l' incorporation pour transformer votre grand nombre de variables catégorielles en un seul vecteur. Ce vecteur compressé sera une représentation distribuée des caractéristiques catégorielles. Les entrées catégorielles seront transformées en un vecteur relativement petit de longueur N avec N nombres réels qui représentent en quelque sorte N caractéristiques latentes qui décrivent toutes les entrées.
Considérez le grand nombre de mots dans le dictionnaire anglais. Si ce nombre est N, alors nous pourrions représenter chaque mot comme un vecteur codé à chaud de longueur N. Cependant, word-to-vec est capable de capturer pratiquement toutes ces informations dans un vecteur de longueur entre 200-300.
la source