Fonctionnalités catégorielles à choix multiples: alternatives au codage à chaud?
Je construis un modèle pour prédire la valeur à vie d'un client en fonction des données relationnelles que nous avons sur eux. La table utilisateur contient un ensemble de tables enfants un-à-plusieurs qui peuvent être prédictives. Grossièrement simplifiées, les fonctionnalités enfants se résument à des éléments tels que:
- une liste des catégories d'articles qu'ils ont achetés dans le passé
- une liste des couleurs prédominantes dans les annonces sur lesquelles ils ont cliqué
- etc
Dans chaque cas, la caractéristique évidente comprend une liste de ~ 0 à 10 choix à partir d'une variable catégorielle. J'ai plusieurs de ces fonctionnalités, dont certaines ont jusqu'à ~ 10k valeurs discrètes, donc l'encodage à chaud deviendrait très large, très rapide.
A part: s'il existe un terme artistique pour ce type de "fonctionnalité de liste de balises" que je qualifie de "choisissez plusieurs catégories", veuillez me le dire.
Question: Existe - t-il un schéma de codage dense qui fonctionne avec des fonctionnalités catégorielles à choix multiples?
Réponses
Si votre algorithme est basé sur l'optimisation de la descente de gradient, vous pouvez utiliser des plongements, qui sont des espaces de représentation denses pour les éléments discrets.
Les incorporations sont prises en charge par la plupart des frameworks d'apprentissage en profondeur tels que pytorch ou tensorflow.
Mise à jour: le fait que vous souhaitiez avoir plusieurs valeurs discrètes n'empêche pas la possibilité d'utiliser des plongements: vous pouvez simplement ajouter tous les vecteurs ensemble dans une seule valeur. L'approche la plus simple pour cela serait d'avoir une longueur constante pour la liste (égale au nombre maximum d'éléments dans toutes les listes, ou une valeur maximum raisonnable), en remplissant avec des éléments de "remplissage" les positions qui ne sont pas nécessaires. Si vous souhaitez prendre en compte l'apparence séquentielle des éléments, au lieu d'ajouter les vecteurs ensemble, vous pouvez appliquer des couches convolutives ou un LSTM sur les vecteurs incorporés.
Il existe de nombreuses façons d'encoder des caractéristiques catégorielles dans la bibliothèque d'encodeurs de catégories, vous pouvez en trouver beaucoup.
Celui qui semble le plus prometteur compte tenu de vos données est la cible encodinc