¿Cómo deberíamos acelerar el procesamiento de datos del lenguaje R?

Agregando a la respuesta de Oscar Cassetti, me gustaría llamar su atención para comprender primero a qué versión de R se refiere. Normalmente, lo que las personas quieren decir con R es GNU-R, que es solo una implementación de R. Hay otras implementaciones como pqR, FastR, que también son relativamente más rápidas. Amablemente, piensa en esto si quieres entender en detalle ¿Por qué R es tan lento?

Luego hay formas de mejorar el rendimiento de R como:

  1. Uso de operaciones vectoriales (funciones de aplicación) en lugar de bucles for: una breve introducción a “aplicar” en R
  2. Si los datos son grandes y no pueden caber en la memoria, use RHadoop en el entorno Hadoop
  3. Pruebe RCpp si desea utilizar capacidades C que pueden mejorar la velocidad en mayor medida
  4. Utilice la computación paralela en el sistema multinúcleo a través de Snowfall y el paquete paralelo

Lo primero que debe hacer es comprender si su problema es de memoria intensiva, CPU intensiva o ambos. Esencialmente, debe analizar el algoritmo que va a utilizar y analizar si necesita memoria rápida o grande, CPU rápida o ambas. Una vez que comprenda en qué área se encuentra su problema, debe evaluar las diversas tecnologías en consecuencia.
Lo siguiente es aislar la tarea pesada y, como lo sugiere Yingkang Xie, escribir en un idioma de nivel inferior. R ofrece enlace a C con .C función C ++ con RCpp y RCpp11, Java con R Rjava.
Varios paquetes como multinúcleo, nieve, Rmpi ​​y Rhadoop, solo por nombrar algunos, lo ayudarán a abordar diferentes tipos de problemas.

1) Evite los bucles for / while, use vectorización y aplique / lapply / tapply en su lugar.
2) Computación paralela, procese los datos con múltiples núcleos o incluso múltiples máquinas.
3) Escriba las interfaces en C, pase los datos al lenguaje de programación de bajo nivel para acelerar el procesamiento de datos.

Hay otras formas de acelerar los programas de R. Una es guardar el código R como un archivo de lenguaje de marcado de modelado predictivo (PMML) y usar nuestro motor de puntuación sobre Spark para hacer predicciones basadas en el modelo. Esto permitiría calificar el modelo en un conjunto de datos mucho más grande de lo que es posible de otra manera. Esto también haría uso de un grupo de nodos y aceleraría el código R. Más detalles están disponibles en nuestro próximo artículo en Dr. Dobb’s | Cosas buenas para desarrolladores serios: herramientas de programación, código, C ++, Java, HTML5, nube, móvil, revista Testing.

La otra posibilidad es invocar el código R en un grupo de nodos Storm encapsulando cada invocación dentro de un perno Storm. Esto se puede usar como un método paralelo de datos para acelerar / escalar la ejecución del código R sobre Storm.

Estoy de acuerdo con la respuesta de Xie, hoy en día los desarrolladores de R están estudiando la programación GPU-CUDA ya que ofrecen velocidades mucho más altas en operaciones matriciales.

He escrito regresión múltiple en CUDA, actualmente está en la etapa de optimización una vez que está hecho, lanzará R-Package para el mismo. Puedes seguirlo aquí … github.com / ironmanMA

¿Has pensado en cambiar tu BLAS predeterminado (Atlas en la mayoría de los sistemas) con OpenBLAS o MKL de Intel? Proporciona aceleraciones significativas sobre operaciones grandes.

More Interesting

¿Es posible aplicar la localización de objetos sin tener regiones de caja en la verdad básica?

¿Cómo se hace el cambio de C ++ a Python? Me siento más cómodo con C ++ y lo he estado usando para hacer la mayor parte de mi programación; Me parece que lleva mucho tiempo y Python hace las cosas rápidamente. ¿Cuál es la mejor manera de hacer el cambio?

¿La ingeniería de características es relevante para los bosques aleatorios? ¿Cómo son relevantes las transformaciones de centrado, escala y Box-Cox en este contexto?

¿Qué parte de la investigación de aprendizaje profundo es empírica versus teórica?

¿Debo usar TensorFlow o Caffe2 para comenzar a aprender el aprendizaje automático y el aprendizaje profundo?

¿Hay algún programa en desarrollo que pueda escuchar un idioma y comenzar a aprenderlo, como en Star Trek?

¿Qué significa decir que dos clasificadores son independientes?

¿Cuáles serán las características de la próxima generación de servicios de monitoreo social?

¿Cómo se puede aplicar el aprendizaje profundo a los sistemas de recomendación en el mercado de valores?

¿Cuáles son las características del texto en la minería de datos?

¿Cuáles son las habilidades requeridas para un ingeniero de aprendizaje automático / aprendizaje profundo de nivel básico?

¿El aprendizaje profundo hará que otros algoritmos de aprendizaje automático sean obsoletos?

¿Cuál es la diferencia entre ML y NLP?

¿Cuál es una buena manera de convertir métrica discreta en métrica circular?

¿Cuál es la diferencia entre datos etiquetados y datos no etiquetados?