Réduction du nombre de niveaux de variable prédictive catégorique non ordonnée

11

Je veux former un classificateur, par exemple SVM, ou une forêt aléatoire, ou tout autre classificateur. L'une des fonctionnalités de l'ensemble de données est une variable catégorielle avec 1000 niveaux. Quelle est la meilleure façon de réduire le nombre de niveaux dans cette variable. Dans R, il y a une fonction appelée combine.levels()dans le paquet Hmisc , qui combine des niveaux peu fréquents, mais je cherchais d'autres suggestions.

sabunime
la source
La variable catégorielle n'est-elle pas ordonnée? Combien de cas avez-vous environ? Quelle est la distribution de fréquence à travers la variable catégorielle?
Jeromy Anglim
Les niveaux ne sont pas classés. J'ai environ 10 000 observations. La distribution de fréquence est la suivante: le niveau A apparaît dans environ 11% des observations. Le niveau B apparaît dans 8%. Le niveau c apparaît dans 5%. Environ 15 de ces niveaux couvrent 50% des observations de l'ensemble de données.
sabunime

Réponses:

9

La meilleure façon de procéder va varier considérablement en fonction de la tâche que vous effectuez, il est donc impossible de dire ce qui sera le mieux d'une manière indépendante de la tâche.

Il y a deux choses faciles à essayer si vos niveaux sont ordinaux:

  1. Bin-les. Par exemple, 0 = (0 250), 1 = (251 500), etc. Vous souhaiterez peut-être sélectionner les limites afin que chaque bac ait un nombre égal d'éléments.
  2. Vous pouvez également effectuer une transformation de journal des niveaux. Cela réduira la plage.

Si les niveaux ne sont pas ordinaux, vous pouvez regrouper les niveaux en fonction d'autres entités / variables de votre ensemble de données et substituer les ID de cluster aux niveaux précédents. Il existe autant de façons de procéder que d'algorithmes de clustering, le champ est donc largement ouvert. Comme je l'ai lu, c'est ce qui combine.levels()se passe. Vous pouvez faire de même en utilisant kmeans()ou prcomp(). (Vous pourriez / devriez par la suite former un classificateur pour prédire les clusters pour les nouveaux points de données.)

Joey
la source
3
Je ne connais pas de très bon moyen de gérer cela autre que de traiter la variable catégorielle comme un effet aléatoire. Vous pouvez émuler cela en utilisant un processus de pénalisation quadratique (crête) sur la variable. Mon livre et mes notes de cours sur la stratégie de modélisation de la régression y vont.
Frank Harrell
1
@FrankHarrell Deux approches me viennent à l'esprit: l'analyse des classes latentes à variable POlytomous en serait une (cran.r-project.org/web/packages/poLCA/poLCA.pdf), l'analyse des correspondances une autre (par exemple, statmethods.net/advstats/ca. html).
Mike Hunter