Filets neuronaux: une seule variable à chaud écrasante continue?


13

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.)


Avez-vous envisagé d'utiliser deux (ou plus) modèles séquentiels, puis de les fusionner? Chaque modèle a des entrées qui correspondent mieux aux données au fur et à mesure (au lieu de les écraser comme une saucisse.) Les cibles sont les mêmes, mais vous créez deux ensembles de données d'entraînement, chacun étant alimenté indépendamment pendant l'ajustement. Directement après la fusion vient votre couche de sortie finale, de sorte que la couche finale décide du modèle qui fonctionne le mieux pour des échantillons particuliers. De keras.io: keras.io/getting-started/sequential-model-guide
photox

Exactement ce que je cherchais. Merci d'avoir contribué.
user1367204

J'ai essayé cela et la val_loss de l'ensemble (model_1, model_2) était supérieure à la val_loss de model_1 et supérieure à la val_loss de model_2.
user1367204

avez-vous réellement essayé cela et déterminé que ce problème se produit réellement? quels tests avez-vous faits pour vérifier ce point? quels ont été les résultats?
Hugh Perkins

Réponses:


5

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.


4

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.