12
votes

R Forfaits d'apprentissage automatique pour faire face aux facteurs avec un grand nombre de niveaux

J'essaie de faire des choses d'apprentissage de la machine qui impliquent de nombreuses variables de type facteur (mots, descriptions, temps, fondement non numériques). Je compte généralement sur aléatoireForest mais cela ne fonctionne pas avec des facteurs qui ont> 32 niveaux.

Quelqu'un peut-il suggérer de bonnes alternatives?


0 commentaires

3 Réponses :


15
votes

Les méthodes d'arborescence ne fonctionneront pas, car le nombre de scissions possibles augmente de manière exponentielle avec le nombre de niveaux. Cependant, avec des mots, il est typiquement adressé par la création de variables indicatrices pour chaque mot (de la description, etc.) - de cette façon, les divisions peuvent utiliser un mot à la fois (oui / non) au lieu de choisir toutes les combinaisons possibles. En général, vous pouvez toujours élargir les niveaux en indicateurs (et certains modèles le font implicitement, tels que GLM). Il en va de même pour la gestion de texte avec d'autres méthodes telles que SVM, etc. La réponse peut donc être que vous devez penser à votre structure de données d'entrée, pas autant de méthodes. Sinon, si vous avez une sorte d'ordre sur les niveaux, vous pouvez le linéariser (il n'y a donc que c-1 scissions).


0 commentaires

3
votes

Il n'y a rien de mal en théorie avec l'utilisation de la méthode de la classe aléatoire sur les variables de classe qui ont plus de 32 classes - il est calculé en calcul, mais pas impossible à gérer un nombre de classes à l'aide de la méthodologie de forêt aléatoire. Le package RAL normal ROBALFOREST définit 32 sous forme de nombre maximum de classes pour une variable de classe donnée et interdit à l'utilisateur de s'exécuter de manière aléatoire sur leest sur n'importe quoi avec> 32 classes pour une variable de classe.

Linarlizing La variable est une très bonne suggestion - j'ai utilisé la méthode de classement des classes, puis de les briser uniformément en 32 méta-classes. Donc, s'il y a en fait 64 classes distinctes, la méta-classe 1 consiste en toutes choses en classe 1 et 2, etc. Le seul problème ici consiste à déterminer une manière raisonnable de faire le classement - et si vous travaillez avec, disons, Mots Il est très difficile de savoir comment chaque mot doit être classé sur tous les mots.

Un moyen autour de cela est de créer n ensembles de prédiction différents, où chaque ensemble contient toutes les instances avec un sous-ensemble particulier de 31 des classes de chaque variable de classe avec plus de 32 classes. Vous pouvez faire une prédiction à l'aide de tous les ensembles, puis en utilisant des mesures d'importance variable fournies avec le paquet trouver la mise en œuvre où les classes utilisées étaient les plus prédictives. Une fois que vous avez découvert les 31 classes les plus prédictives, mettez en œuvre une nouvelle version de RF à l'aide de toutes les données qui désignent ces classes les plus prédictives telles que 1 à 31 et tout le reste en une «autre» classe, vous donnant les 32 classes maximum pour le variable catégorique mais espérons avoir une grande préservation de la puissance prédictive.

bonne chance!


0 commentaires

6
votes

En général, le meilleur paquet que j'ai trouvé pour des situations où il y a beaucoup de niveaux de facteur consiste à utiliser le package GBM .

Il peut gérer jusqu'à 1024 niveaux de facteur.

S'il y a plus de 1024 niveaux, je modifie généralement les données en conservant les niveaux de facteur 1023 les plus fréquents survenant, puis codez les niveaux restants comme un niveau.


0 commentaires