Une alternative d'encodage à chaud pour les grandes valeurs catégorielles?

13

Bonjour, j'ai une trame de données avec de grandes valeurs catégorielles sur 1600 catégories. Est-ce que je peux trouver des alternatives pour ne pas avoir plus de 1600 colonnes.

J'ai trouvé ce lien intéressant ci-dessous http://amunategui.github.io/feature-hashing/#sourcecode

Mais ils se convertissent en classe / objet dont je ne veux pas. Je veux ma sortie finale en tant que trame de données afin de pouvoir tester avec différents modèles d'apprentissage automatique? ou existe-t-il un moyen d'utiliser la matrice générée pour former les autres modèles d'apprentissage automatique autres que la régression logistique ou XGBoost?

Existe-t-il de toute façon que je peux implémenter?

vinaykva
la source
C'est vraiment un problème? En supposant que vous utilisez une représentation matricielle clairsemée, le codage onehot ne sera pas un vrai problème.
Louis T
@LouisT J'ai des millions d'enregistrements plus de 500m d'enregistrements
vinaykva
Pourtant, si c'est un seul chaud, cela n'aura pas d'importance si vous utilisez une matrice clairsemée
Louis T
@LouisT La complexité augmentera et le temps de train augmentera également et mes données deviendront beaucoup trop rares
vinaykva
1
votre message date d'il y a environ 1 an, et n'est peut-être plus intéressé, mais au cas où vous seriez toujours intéressé, avez-vous entendu parler de l'intégration d'entités à l'aide de réseaux neuronaux? medium.com/@satnalikamayank12/…
TwinPenguins

Réponses:

10

Une option consiste à mapper des valeurs rares à «autre». Cela se fait généralement par exemple dans le traitement du langage naturel - l'intuition étant que les étiquettes très rares n'ont pas beaucoup de puissance statistique.

J'ai également vu des gens mapper des valeurs catégorielles 1-chaud à des vecteurs de dimension inférieure, où chaque vecteur 1-chaud est représenté à nouveau comme un tracé à partir d'une gaussienne multivariée. Voir par exemple le document Deep Knowledge Tracing, qui dit que cette approche est motivée par l'idée de la détection compressée:

BARANIUK, R. Détection compressive. Magazine de traitement du signal IEEE 24, 4 (2007).

Plus précisément, ils cartographient chaque vecteur de longueur N à un vecteur plus court de longueur log2 (N). Je ne l'ai pas fait moi-même mais je pense que cela vaut la peine d'essayer.

à M
la source
Je me demande comment calculer la distance avec un tel encodage?
eric2323223
2

Vous pouvez lire les données et obtenir d'abord une liste de toutes les valeurs uniques de vos variables catégorielles. Ensuite, vous pouvez adapter un objet d'encodeur à chaud (comme le sklearn.preprocessing.CategoricalEncoder) sur votre liste de valeurs uniques.

Cette méthode peut également vous aider dans un cadre de test de train ou lorsque vous lisez vos données par blocs. J'ai créé un module python qui fait tout cela seul. Vous pouvez le trouver dans ce référentiel GitHub - dummyPy

Un court tutoriel à ce sujet - Comment One Hot Encode Variables catégorielles en Python?

Yashu Seth
la source
0

Vous pouvez effectuer un regroupement de valeurs similaires, de sorte que les valeurs (ou colonnes) qui contiennent la valeur la plus proche (ou qui a beaucoup de motifs similaires) puissent être remplacées par une valeur (ou colonne) et ainsi vos 1600 valeurs peuvent se résumer à 400 (ou même Moins).

Ex. pour des valeurs comme (nuage comme - Nimbus nuages, bruine, pluie légère, pluie, pluie forte peuvent être converties en (pluie légère, pluie, pluie forte).

akash manakshe
la source