J'ai cherché dans les questions concernant l'encodage catégorique des fonctionnalités, mais je n'ai trouvé aucune discussion sur mon problème. Toutes mes excuses si je l'ai raté.
Disons que nous avons un ensemble de données avec des variables binaires et nominales d'importance à peu près égale.
La plupart des classificateurs ne peuvent pas traiter directement les types catégoriels, donc ceux-ci doivent être transformés - par exemple en utilisant un codage à chaud (variables factices) comme expliqué dans cette réponse .
Si une variable catégorielle a une cardinalité élevée, l'encodage de cette façon ne "surchargerait" pas les autres variables (par exemple binaires)? Par «cardinalité», j'entends le nombre de catégories dans une variable nominale.
Si notre modèle de classificateur connaît les relations entre les variables, ne tenterait-il pas inutilement de trouver des relations entre les "composants" fictifs binaires introduits de la même variable?
Et si oui, comment y remédier?
La meilleure solution à laquelle je peux penser est de regrouper logiquement les propriétés de haute cardinalité dans des "compartiments", mais s'il y a suffisamment de valeurs uniques pour être un problème, les regrouper manuellement serait également très laborieux.
Edit: C'est trivial et ne résout que partiellement le problème, mais l'une des choses que j'ai fini par faire est de remplacer toutes les valeurs catégorielles relativement rares par une nouvelle catégorie "autre". L'optimisation du seuil de prise en compte de la valeur "rare" peut prendre du temps, mais au moins cette approche peut être automatisée.
la source
Réponses:
Si une variable catégorielle a une cardinalité élevée, l'encodage de cette façon ne "surchargerait" pas les autres variables (par exemple binaires)?
Cela dépend de l'algorithme.
Des algorithmes basés sur l' échantillonnage des colonnes (forêts aléatoires, arbres extrêmement aléatoires, boosting de gradient ou classificateur ensaché ...) forment de nombreux modèles sur des sous-échantillons des données. Si 90% de vos colonnes représentent une variable "fictive", il est probable qu'un grand nombre de modèles travaillent réellement sur la même variable, ce qui les rend plus corrélés qu'ils ne devraient l'être, ce qui améliore les performances.
Les méthodes de régression linéaire ne seront pas affectées, elles donneront simplement un poids à chaque variable binaire produite par la variable encodée.
Avec les voisins les plus proches et les méthodes basées sur la similitude (telles que les SVM du noyau), l'impact devrait également être limité. Peu importe le nombre de colonnes, la seule chose qui compte au final est le produit interne ou la distance entre deux lignes de vos données. Cependant, le nombre de colonnes qui découle d'une variable nominale, la distance (ou produit intérieur) ne peut être que de 0 ou 1 (les variables nominales étaient égales ou non).
Si notre modèle de classificateur est conscient des relations entre les variables, n'essaierait-il pas inutilement de trouver des relations entre les "composants" binaires introduits de la même variable?
Comment votre classificateur est-il "conscient" des relations entre les variables? Je ne suis pas sûr de pouvoir répondre à cette question.
Et si oui, comment y remédier?
Dans le cas de toute méthode reposant sur des échantillons des colonnes, des pondérations préalables pourraient être attribuées aux colonnes (afin qu'elles ne soient pas sélectionnées avec les mêmes probabilités). Cependant, je n'ai aucune implémentation à l'esprit pour cela. Une solution rapide pourrait être de répéter les autres colonnes, de sorte que la probabilité d'être sélectionné augmente artificiellement.
la source