2012-06-15 16 views
36

Parece que R está realmente diseñado para manejar conjuntos de datos que puede extraer completamente en la memoria. ¿Qué paquetes R se recomiendan para el procesamiento de señales y el aprendizaje automático en conjuntos de datos de gran tamaño que no se pueden extraer de la memoria?Paquete recomendado para el procesamiento de conjuntos de datos muy grandes y el aprendizaje automático en R

Si R es simplemente la manera incorrecta de hacer esto, estoy abierto a otras sugerencias gratuitas sólidas (por ejemplo scipy si hay alguna manera agradable de manejar grandes conjuntos de datos)

+10

Eche un vistazo a la subsección "Memoria grande y datos sin memoria" de [vista de tareas de computación de alto rendimiento] (http://cran.r-project.org/web/views/HighPerformanceComputing.html) en CRAN. [bigmemory] (http://cran.r-project.org/web/packages/bigmemory/index.html) y [ff] (http://cran.r-project.org/web/packages/ff/index .html) son dos paquetes populares. Además, considere almacenar datos en una base de datos y leerlos en lotes más pequeños para su análisis. – jthetzel

Respuesta

28

Eche un vistazo a la subsección "Memoria grande y datos de falta de memoria" de high performance computing task view en CRAN. bigmemory y ff son dos paquetes populares. Para bigmemory (y los relacionados biganalytics y bigtabulate), el bigmemory website tiene algunas presentaciones, viñetas y descripciones muy buenas de Jay Emerson. Para ff, recomiendo leer las excelentes presentaciones de diapositivas de Adler Oehlschlägel y sus colegas en el ff website.

Además, considere almacenar datos en una base de datos y leer en lotes más pequeños para su análisis. Es probable que haya varios enfoques a considerar.Para comenzar, consdier mirando algunos de los ejemplos en el paquete biglm, así como this presentation de Thomas Lumley.

Investigue los otros paquetes en la vista de tareas de computación de alto rendimiento y mencione en las otras respuestas. Los paquetes que menciono arriba son simplemente aquellos con los que tengo más experiencia.

+1

Terminé usando BigMemory y en general estoy bastante satisfecho con él. –

+1

Pero con ff, bigmemory o bases de datos ... ¿puede realizar cualquier operación ofrecida por R o cualquier paquete directamente? ¿O solo puede ejecutar las funciones que ff, bigmemory o el motor de base de datos han implementado? (sin necesidad de dividir los datos en piezas pequeñas). Por ejemplo, quiero ejecutar una regresión en un archivo numérico de 50 GB o calcular la mediana. O quiero aplicar DBScan, o simplemente quiero crear otro vector donde cada elemento se exprese como una operación con los antiguos BB [i] = AA [i] * AA [i-1] + AA [i-2]. ¿Puedo hacer esto con R y la ff, bigmemory o cualquier conector de base de datos? – skan

8

creo que la cantidad de datos que pueda el proceso está más limitado por las habilidades de programación que por otra cosa. Aunque una gran cantidad de funciones estándar se centra en el análisis de la memoria, cortar los datos en trozos ya ayuda mucho. Por supuesto, esto lleva más tiempo programar que recoger el código R estándar, pero muchas veces es bastante posible.

Los datos de corte se pueden hacer, por ejemplo, utilizando read.table o readBin, que admiten solo la lectura de un subconjunto de los datos. Alternativamente, puede echar un vistazo a la vista de tareas de computación de alto rendimiento para paquetes que brindan funcionalidades sin memoria desde el primer momento. También podría poner sus datos en una base de datos. Para los datos de trama espacial, el excelente paquete de trama proporciona análisis sin memoria.

8

Para tareas de aprendizaje automático, puedo recomendar el uso del paquete biglm, utilizado para hacer "Regresión de datos demasiado grandes para caber en la memoria". Para usar R con datos realmente grandes, uno puede usar Hadoop como un backend y luego usar el paquete rmr para realizar análisis estadísticos (u otros) a través de MapReduce en un clúster Hadoop.

7

Todo depende de los algoritmos que necesite. Si se pueden traducir al formulario incremental (cuando solo se necesita una pequeña parte de datos en un momento dado, por ejemplo, para Naive Bayes puede mantener en memoria solo el modelo mismo y la observación actual que se está procesando), entonces la mejor sugerencia es realice el aprendizaje automático de forma incremental, leyendo nuevos lotes de datos del disco.

Sin embargo, muchos algoritmos y especialmente sus implementaciones realmente requieren todo el conjunto de datos. Si el tamaño del conjunto de datos se ajusta a su disco (y las limitaciones del sistema de archivos), puede usar el paquete mmap que permite asignar el archivo en el disco a la memoria y usarlo en el programa. Sin embargo, tenga en cuenta que las lecturas de lectura en el disco son costosas y, a veces, a R le gusta mover los datos hacia adelante y hacia atrás con frecuencia. Así que ten cuidado.

Si sus datos no se pueden almacenar ni siquiera en su disco duro, necesitará utilizar sistemas distribuidos de aprendizaje automático. Uno de esos sistemas basados ​​en R es Revolution R que está diseñado para handle conjuntos de datos realmente grandes. Desafortunadamente, no es de código abierto y cuesta bastante dinero, pero puede intentar obtener free academic license. Como alternativa, puede estar interesado en el Apache Mahout basado en Java, una solución no tan elegante, pero muy eficiente, basada en Hadoop e incluye muchos algoritmos importantes.

+1

Con Revolution R puede aplicar algunas funciones en grandes conjuntos de datos, pero solo las funciones implementadas en el paquete Revoscaler. No tiene una forma genérica de usar cualquier función R o paquete en grandes conjuntos de datos. Por ejemplo, si desea ejecutar un clúster DBSCAN, deberá volver a escribir todo el método con las funciones básicas que ofrece revoscaler (o paquetes similares). – skan

3

Si la memoria no es suficiente, una solución es insertar datos en el disco y usar la informática distribuida. Creo que RHadoop (R + Hadoop) puede ser una de las soluciones para hacer frente a grandes cantidades de datos.

Cuestiones relacionadas