studio saber runif numeros numero negativos funcion entero ejemplos como apuntes aleatorios r parallel-processing

saber - runif en r



EjecuciĆ³n paralela de bosque aleatorio en R (5)

¿Es consciente de que el paquete caret puede realizar gran parte de la manipulación de ejecuciones paralelas (así como la preparación de datos, resúmenes, ...) por usted?

En última instancia, por supuesto, si quedan algunas operaciones costosas en el cómputo de bosques aleatorios en sí, no hay mucho que pueda hacer, ya que Andy pasó varios años en mejorarlo. Espero que haya pocas o ninguna fruta de baja altura para la recolección ...

Estoy corriendo bosque al azar en R en paralelo

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

Ejecución paralela (tardó 73 seg)

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

Ejecución secuencial (tomó 82 seg)

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

En la ejecución paralela, la generación del árbol es bastante rápida, como de 3 a 7 segundos, pero el resto del tiempo se consume al combinar los resultados (opción de combinación). Por lo tanto, solo vale la pena ejecutar una ejecución paralela si la cantidad de árboles es realmente alta. ¿Hay alguna manera en que pueda modificar la opción "combinar" para evitar cualquier cálculo en cada nodo que no necesito y hacerlo más rápido?

PD. Lo anterior es solo un ejemplo de datos. En realidad tengo unas 100 mil características para unas 100 observaciones.


Dependiendo de su CPU, probablemente podría obtener una aceleración del 5% -30% al elegir la cantidad de trabajos que coincidan con la cantidad de núcleos registrados que coincidan con la cantidad de núcleos lógicos del sistema. (A veces es más eficiente hacer coincidir el número de núcleos físicos del sistema). Si tiene una computadora portátil genérica Intel de doble núcleo con Hyper Threading (4 núcleos lógicos), entonces DoMC probablemente registró un grupo de 4 núcleos. Por lo tanto, 2 núcleos estarán inactivos cuando se calculen las iteraciones 5 y 6 más el tiempo adicional para iniciar / detener dos trabajos adicionales. Sería más eficiente hacer solo 2-4 trabajos de más árboles.


El paquete H20 se puede utilizar para resolver su problema.

De acuerdo con la página de documentation H20, H2O es "el motor matemático de código abierto para big data que computa algoritmos de aprendizaje automático distribuidos en paralelo, tales como modelos lineales generalizados, máquinas de aumento de gradiente, bosques aleatorios y redes neuronales (aprendizaje profundo) dentro de varios entornos de clúster".

Implementación de bosque aleatorio usando H2O:

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


Establecer .multicombine en TRUE puede hacer una diferencia significativa:

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

Esto hace que se combine para ser llamados una vez en lugar de cinco veces. En mi máquina de escritorio, esto se ejecuta en 8 segundos en lugar de 19 segundos.


Me pregunto si el código parallelRandomForest sería útil para usted.

Según el autor, se ejecutó aproximadamente 6 veces más rápido en su conjunto de datos con un consumo de memoria 16 veces menor.

SPRINT también tiene una implementación paralela here .