Le package randomForest de R ne peut pas gérer le facteur avec plus de 32 niveaux. Lorsqu'il reçoit plus de 32 niveaux, il émet un message d'erreur:
Ne peut pas gérer les prédicteurs catégoriels avec plus de 32 catégories.
Mais les données dont je dispose ont plusieurs facteurs. Certains d'entre eux ont plus de 1000 niveaux et certains ont 100+. Il a même un «état» des États-Unis qui est de 52.
Alors, voici ma question.
Pourquoi y a-t-il une telle limitation? randomForest refuse d'exécuter même pour le cas simple.
> d <- data.frame(x=factor(1:50), y=1:50) > randomForest(y ~ x, data=d) Error in randomForest.default(m, y, ...) : Can not handle categorical predictors with more than 32 categories.
Si cela est simplement dû à une limitation de la mémoire, comment le programme randomForeestRegressor de scikit learn peut-il fonctionner avec plus de 32 niveaux?
Quelle est la meilleure façon de gérer ce problème? Supposons que j'ai X1, X2, ..., X50 variables indépendantes et Y est variable dépendante. Et supposons que X1, X2 et X3 aient plus de 32 niveaux. Que devrais-je faire?
Ce à quoi je pense, c'est d'exécuter un algorithme de clustering pour chacun des X1, X2 et X3 où la distance est définie comme la différence en Y. Je vais exécuter trois groupements car il y a trois variables problématiques. Et dans chaque clustering, j'aimerais pouvoir trouver des niveaux similaires. Et je vais les fusionner.
Comment ça sonne?
la source
randomForest
peut gérer des prédicteurs catégoriques avec jusqu'à 53 niveaux. ActualitésRéponses:
C'est en fait une contrainte assez raisonnable car une division sur un facteur avec niveaux est en fait une sélection de l'une des 2 N - 2 combinaisons possibles. Donc, même avec N comme 25, l'espace des combinaisons est si énorme qu'une telle inférence n'a qu'un sens mineur.N 2N−2 N
L'autre option est de changer la représentation - peut-être que votre résultat ne dépend pas directement de l'entité étatique mais, par exemple, la superficie, la population, le nombre de pins par habitant ou d'autres attributs que vous pouvez connecter à votre système d'information à la place.
Il se peut également que chaque État soit une entité si isolée et non corrélée qu'il nécessite un modèle distinct pour lui-même.
Le regroupement basé sur une décision est probablement une mauvaise idée car de cette façon, vous transférez des informations de la décision en attributs, ce qui se termine souvent par un sur-ajustement.
la source
La raison principale est la façon dont randomForest est implémenté. La mise en œuvre de R découle beaucoup des spécifications d'origine de Breiman. Ce qui est important ici à noter est que pour les variables factorielles / catégorielles, les critères de division sont binaires avec quelques valeurs d'étiquette à gauche et les valeurs d'étiquette restantes à droite.
Pourquoi les implémentations de Weka et Python fonctionnent?
L'implémentation weka n'utilise pas d'arbres CART par défaut. Il utilise des arbres C45 qui n'ont pas ce problème de calcul, car pour les entrées catégorielles, il se divise en plusieurs nœuds, un pour chaque valeur de niveau.
L'implémentation de forêt aléatoire python ne peut pas utiliser de variables catégorielles / factorielles. Vous devez coder ces variables en variables fictives ou numériques.
la source
Vous pouvez essayer de représenter cette colonne différemment. Vous pouvez représenter les mêmes données qu'une trame de données clairsemée.
Code viable minimum;
Remarquez comment chaque valeur de la colonne d'origine devient maintenant une colonne factice distincte.
Exemple de code plus étendu;
Même si ce morceau de code montre que vous n'obtiendrez en effet plus l'erreur, vous remarquerez que l'algorithme randomForest a maintenant besoin de beaucoup de temps avant de se terminer. Cela est dû à une contrainte CPU, vous pouvez également réduire cette tâche via l'échantillonnage.
Pour plus d'informations, consultez ce blog:
https://blog.cloudera.com/blog/2013/02/how-to-resample-from-a-large-data-set-in-parallel-with-r-on-hadoop/
la source
Vous pouvez utiliser le package extraTrees à la place. L'algorithme des forêts extrêmement randomisées n'essaye pas de point d'arrêt / division, mais seulement un sous-ensemble aléatoire limité de divisions.
la source
Autre option: selon le nombre de niveaux et le nombre d'observations dans vos données, vous pouvez fusionner certains niveaux. Au-delà du dépassement de la limite, cela peut réduire la variance si vous avez plusieurs niveaux avec seulement quelques observations. Hadley « s Forcats: fct_lump fait cela.
la source