hacer - datos train y test
Paquete recomendado para el procesamiento de grandes conjuntos de datos y el aprendizaje automático en R (5)
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?
Si R es simplemente la forma incorrecta de hacerlo, estoy abierto a otras sugerencias robustas y gratuitas (p. Ej., Scipy si hay alguna buena forma de manejar conjuntos de datos muy grandes)
Creo que la cantidad de datos que puede procesar está más limitada 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.
Eche un vistazo a la subsección "Memoria grande y datos de falta de memoria" de la vista de tareas informáticas de alto rendimiento en CRAN. bigmemory y ff son dos paquetes populares. Para bigmemory (y biganalytics relacionados, y bigtabulate ), el sitio web bigmemory 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 sitio web de ff .
Además, considere almacenar datos en una base de datos y leerlos en lotes más pequeños para su análisis. Es probable que haya varios enfoques a considerar. Para comenzar, consdier echa un vistazo a algunos de los ejemplos del paquete biglm , así como esta presentación de Thomas Lumley.
Y investigue los otros paquetes en la vista de tareas informáticas de alto rendimiento y mencione en las otras respuestas. Los paquetes que menciono arriba son simplemente aquellos con los que tengo más experiencia.
Para las 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 de Hadoop.
Si la memoria no es suficiente, una solución es enviar datos a un disco y usar computación distribuida. Creo que RHadoop (R + Hadoop) puede ser una de las soluciones para hacer frente a grandes cantidades de datos.
Todo depende de los algoritmos que necesita. Si se pueden traducir en forma 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 en sí y la observación actual que se está procesando), entonces la mejor sugerencia es realizar la máquina aprendiendo incrementalmente, 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 pueden almacenarse 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 una licencia académica gratuita . Como alternativa, puede estar interesado en Apache Mahout basado en Java, una solución no tan elegante, pero muy eficiente, basada en Hadoop e incluye muchos algoritmos importantes.