Encodage de fonctionnalités catégorielles en nombres pour l'apprentissage automatique


14

De nombreux algorithmes d'apprentissage automatique, par exemple les réseaux de neurones, s'attendent à traiter les nombres. Ainsi, lorsque vous avez des données catégorielles, vous devez les convertir. Par catégorique, je veux dire, par exemple:

Marques automobiles: Audi, BMW, Chevrolet ... ID utilisateur: 1, 25, 26, 28 ...

Même si les identifiants des utilisateurs sont des nombres, ils ne sont que des étiquettes et ne signifient rien en termes de continuité, comme l'âge ou la somme d'argent.

Ainsi, l'approche de base semble utiliser des vecteurs binaires pour coder les catégories:

Audi: 1, 0, 0 ... BMW: 0, 1, 0 ... Chevrolet: 0, 0, 1 ...

C'est OK quand il y a peu de catégories, mais au-delà, cela semble un peu inefficace. Par exemple, lorsque vous avez 10 000 identifiants utilisateur à encoder, c'est 10 000 fonctionnalités.

La question est, existe-t-il une meilleure façon? Peut-être une impliquant des probabilités?


3
Pourquoi voudriez-vous inclure un ID utilisateur dans un modèle prédictif? Quant aux autres variables catégorielles avec une cardinalité plus grande que vous ne le souhaitez lorsque vous utilisez un codage de variable factice comme vous le décrivez, je les exécute d'abord dans un arbre de décision comme seul prédicteur - afin de réduire les niveaux. Peut également re-bin en regroupant les niveaux "rares", etc.
B_Miner

Cela semble intéressant - comme des effets aléatoires dans un modèle statistique où vous êtes intéressé par des effets particuliers à un individu spécifique. Je peux imaginer des situations où cela serait utile, par exemple si vous voyez les mêmes personnes encore et encore et que vous souhaitez prédire ce que fera cette personne en particulier. Veuillez partager plus sur vos plans si vous le pouvez. En outre, vous pourriez envisager la modélisation à plusieurs niveaux, bien qu'elle soit plus traditionnellement utilisée dans les paramètres inférentiels plutôt que dans l'apprentissage automatique.
Anne Z.27

Je me souviens avoir lu un concours de ML, où certains chercheurs intelligents ont détecté que les identifiants d'utilisateur dans les données avaient été donnés au moment de la création du compte d'utilisateur. Par conséquent, les horodatages, qui ont été obscurcis, ont été révélés (influençant positivement la prédiction de la réponse). En dehors de ces cas et de ceux mentionnés par Anne (systèmes de recommandation), je n'inclurais pas l'ID utilisateur.
steffen

Anne - Un modèle à effets aléatoires n'est-il PAS réellement intéressé par les individus - donc ils sont considérés comme un échantillon d'une population?
B_Miner

Je ne comprends pas, si le problème d'apprentissage est de prédire la catégorie binaire riche / non riche, pourquoi ne serait-il pas logique d'avoir une fonctionnalité pour la marque de voiture d'un utilisateur particulier. Les identifiants d'utilisateur peuvent être utilisés si le réseau social de l'individu est connu: par exemple pour démontrer que les amis de l'utilisateur X sont plus enclins à être riches. Y a-t-il quelque chose qui cloche dans cette ligne de pensée?
Vladtn

Réponses:


6

Vous pouvez toujours traiter vos identifiants utilisateur comme un sac de mots: la plupart des classificateurs de texte peuvent traiter des centaines de milliers de dimensions lorsque les données sont rares (de nombreux zéros que vous n'avez pas besoin de stocker explicitement en mémoire, par exemple si vous utilisez des lignes éparses compressées représentation de votre matrice de données).

Cependant, la question est: est-il judicieux de traiter un problème spécifique pour traiter les identifiants utilisateur comme des fonctionnalités? Ne serait-il pas plus judicieux de dénormaliser vos données de relation et d'utiliser les fonctionnalités utilisateur (âge, emplacement, caractères du surnom en ligne, historique des transactions ...) au lieu de leurs identifiants?

Vous pouvez également effectuer un clustering de vos vecteurs utilisateur bruts et utiliser les N principaux centres les plus proches comme fonctionnalités activées pour au lieu des ID utilisateur.


OK, bien que ce soit plus une question générale, je vois que la plupart d'entre vous se concentrent sur la question des identifiants utilisateur, alors voici pourquoi je voudrais les utiliser. Regardons l'une des compétitions de Kaggle, à propos de Grockit: kaggle.com/c/WhatDoYouKnow . L'objectif est de prédire si un utilisateur répondra correctement à une question. C'est un problème similaire à mon avis aux systèmes de recommandation, vous obtenez simplement des questions au lieu de films et des correctifs / incorrects au lieu de notes, ainsi que d'autres données. Les horodatages sont disponibles :)
Nucular

1
Dans ce cas, vous pouvez faire l'hypothèse que l'utilisateur est indépendant et vous pouvez créer un classificateur par utilisateur formé uniquement sur leur propre historique.
ogrisel

1

Le codage équilatéral est probablement ce que vous recherchez lorsque vous essayez de coder des classes dans un réseau neuronal. Il a tendance à mieux fonctionner que le codage "1 sur n" référencé dans d'autres articles. Pour référence je peux suggérer: http://www.heatonresearch.com/wiki/Equilateral


Cela semble être lié au codage des valeurs de sortie, et non au codage catégoriel des valeurs d'entrée, ce que l'OP demande.
Alex
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.