32 votes

exécution parallèle de la forêt aléatoire dans R

J'exécute la forêt aléatoire en parallèle avec R

library(doMC)
registerDoMC()
x <- matrix(runif(500), 100)
y <- gl(2, 50)

Exécution parallèle (73 secondes)

rf <- foreach(ntree=rep(25000, 6), .combine=combine, .packages='randomForest') %dopar%
randomForest(x, y, ntree=ntree) 

Exécution séquentielle (82 secondes)

rf <- foreach(ntree=rep(25000, 6), .combine=combine) %do%
randomForest(x, y, ntree=ntree) 

En exécution parallèle, la génération de l'arbre est assez rapide (3 à 7 secondes), mais le reste du temps est consacré à la combinaison des résultats (option de combinaison). Ainsi, l'exécution parallèle ne vaut la peine que si le nombre d'arbres est vraiment élevé. Y a-t-il un moyen de modifier l'option "combiner" pour éviter tout calcul à chaque nœud dont je n'ai pas besoin et le rendre plus rapide ?

PS. Ce qui précède n'est qu'un exemple de données. Dans la réalité, j'ai environ 100 000 caractéristiques pour environ 100 observations.

35voto

Steve Weston Points 5252

Réglage de .multicombine a TRUE peut faire une différence significative :

rf <- foreach(ntree=rep(25000, 6), .combine=randomForest::combine,
              .multicombine=TRUE, .packages='randomForest') %dopar% {
    randomForest(x, y, ntree=ntree)
}

Cela provoque combine d'être appelé une fois plutôt que cinq fois. Sur mon ordinateur de bureau, cette opération s'exécute en 8 secondes au lieu de 19 secondes.

12voto

Dirk Eddelbuettel Points 134700

Savez-vous que le caret peut faire une grande partie du travail manuel pour les exécutions parallèles (ainsi que la préparation des données, les résumés, ...) pour vous ?

En fin de compte, bien sûr, s'il reste des opérations coûteuses dans le calcul de la forêt aléatoire elle-même, il n'y a pas grand-chose à faire car Andy a passé plusieurs années à l'améliorer. Je m'attends à ce qu'il y ait peu ou pas de fruits à cueillir...

5voto

Ashok Krishna Points 133

Le paquet H20 peut être utilisé pour résoudre votre problème.

Selon H20 documentation page H2O est "le moteur mathématique open source pour le big data qui calcule des algorithmes d'apprentissage automatique distribués des algorithmes d'apprentissage automatique tels que les modèles linéaires généralisés, les machines à boosting de gradient, les forêts aléatoires et les réseaux neuronaux (apprentissage profond) dans divers environnements de clusters".

Implémentation de Random Forest en utilisant H2O :

https://www.analyticsvidhya.com/blog/2016/05/h2o-data-table-build-models-large-data-sets/

4voto

Richard Points 5991

Je me demande si le parallelRandomForest serait utile pour vous ?

Selon l'auteur Il a fonctionné environ 6 fois plus vite sur son ensemble de données avec une consommation de mémoire 16 fois moindre.

SPRINT dispose également d'une implémentation parallèle aquí .

1voto

En fonction de votre processeur, vous pourriez probablement obtenir une accélération de 5 à 30 % en choisissant le nombre de tâches correspondant au nombre de cœurs enregistrés correspondant au nombre de cœurs logiques du système. (Il est parfois plus efficace de faire correspondre le nombre de cœurs physiques du système). Si vous avez un ordinateur portable générique Intel à deux cœurs avec Hyper Threading (4 cœurs logiques), alors DoMC a probablement enregistré un cluster de 4 cœurs. Ainsi, 2 cœurs seront inactifs lors du calcul des itérations 5 et 6, plus le temps supplémentaire de démarrage/arrêt de deux tâches supplémentaires. Il serait plus efficace de ne faire que 2-4 travaux de plus d'arbres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X