J'utilise le package party en R avec 10 000 lignes et 34 fonctionnalités, et certaines fonctionnalités factorielles comportent plus de 300 niveaux. Le temps de calcul est trop long. (Cela a pris 3 heures jusqu'à présent et ce n'est pas fini.)
Je veux savoir quels éléments ont un effet important sur le temps de calcul d'une forêt aléatoire. Est-ce qu'il y a des facteurs avec trop de niveaux? Existe-t-il des méthodes optimisées pour améliorer le temps de calcul RF?
r
random-forest
Chenghao Liu
la source
la source
RandomForest étant un ensemble de paniers indépendants formés sur un sous-ensemble aléatoire de fonctionnalités et d'enregistrements, il se prête à la parallélisation. La
combine()
fonction du paquetage randomForest assemblera des forêts formées indépendamment. Voici un exemple de jouet. La réponse de @mpq stipule que vous ne devez pas utiliser la notation de formule, mais plutôt une structure de données / matrice de variables et un vecteur de résultats. Je les ai levées sans vergogne des docs.J'ai passé la fonction de combinaison randomForest au paramètre .combine portant le même nom (qui contrôle la fonction sur la sortie de la boucle. L'inconvénient est que vous n'obtenez aucun taux d'erreur OOB ou une importance plus tragiquement variable.
Modifier:
Après avoir relu le post, je me rends compte que je ne parle pas du problème des facteurs 34+. Une réponse totalement non réfléchie pourrait être de les représenter sous forme de variables binaires. C’est-à-dire que chaque colonne est codée avec un facteur de niveau 0/1 pour sa présence ou non. En effectuant des sélections variables sur des facteurs sans importance et en les supprimant, vous pouvez éviter que votre espace ne devienne trop grand.
la source
Je suggérerais quelques liens:
1) Réduire le nombre de niveaux d’une variable facteur est un lien vers une question
stackoverflow
permettant de traiter un problème similaire lors de l’utilisation durandomForest
progiciel. En particulier, il s'agit d'utiliser uniquement les niveaux les plus fréquents et d'attribuer un nouveau niveau à tous les autres niveaux moins fréquents.L'idée est venue d'ici: le KDD Cup Slow Challenge 2009 . Les données de ce concours comportaient de nombreux facteurs et de nombreux niveaux et expliquaient certaines des méthodes utilisées pour réduire les données de 50 000 lignes à 15 000 colonnes afin qu'elles puissent être exécutées sur un ordinateur portable à 2 cœurs / 2 Go de RAM.
Ma dernière suggestion consisterait à examiner le problème, comme indiqué ci-dessus, en exécutant le problème en parallèle sur une instance Amazon EC2 à processeur élevé.
la source
Je ne peux pas parler de la vitesse de certains algorithmes dans R, mais ce qui cause un long temps de calcul devrait être évident. Pour chaque arbre de chaque branche, CART cherche la meilleure division binaire. Ainsi, pour chacune des 34 entités, ce sont les fractionnements donnés par chacun des niveaux des variables qui sont le plus pris en compte. Multipliez le temps d'exécution pour chaque scission dans un arbre par le nombre de branches dans l'arbre, puis multipliez-le par le nombre d'arbres dans la forêt et vous aurez une longue durée. Qui sait? Peut-être que même avec un ordinateur rapide, cela pourrait prendre des années?
Je pense que la meilleure façon d’accélérer les choses est de regrouper certains niveaux afin que chaque variable soit réduite à peut-être 3 à 5 niveaux au lieu de 300. Bien sûr, cela dépend de la capacité de le faire sans perdre d’importantes pertes. informations dans vos données.
Après cela, vous pourriez peut-être vérifier s'il existe un algorithme intelligent qui peut accélérer le temps de recherche pour la division au niveau de chaque nœud de chaque arborescence. il se peut que, dans un arbre particulier, la recherche fractionnée répète une recherche déjà effectuée pour un arbre précédent. Donc, si vous pouvez sauvegarder les solutions des décisions précédentes et identifier quand vous répétez, peut-être que cette stratégie pourrait économiser un peu de temps de calcul.
la source