web-dev-qa-db-fra.com

Package recommandé pour le traitement de très grands ensembles de données et l'apprentissage automatique dans R

Il semble que R soit vraiment conçu pour gérer des ensembles de données qu'il peut extraire entièrement en mémoire. Quels packages R sont recommandés pour le traitement du signal et l'apprentissage automatique sur de très grands ensembles de données qui ne peuvent pas être extraits en mémoire?

Si R est tout simplement la mauvaise façon de le faire, je suis ouvert à d'autres suggestions gratuites robustes (par exemple scipy s'il existe une bonne façon de gérer de très grands ensembles de données)

41
user334911

Jetez un œil à la sous-section "Grande mémoire et données hors mémoire" de la vue des tâches de calcul haute performance sur CRAN. bigmemory et ff sont deux packages populaires. Pour bigmemory (et les biganalytics , et bigtabulate ), le site web bigmemory a quelques très bonnes présentations, vignettes et aperçus de Jay Emerson . Pour ff, je recommande de lire les excellentes présentations de diapositives d'Adler Oehlschlägel et ses collègues sur le site web ff .

Envisagez également de stocker des données dans une base de données et de les lire en petits lots pour analyse. Il existe probablement un certain nombre d'approches à considérer. Pour commencer, jetez un œil à certains des exemples du package biglm , ainsi que cette présentation de Thomas Lumley.

Et étudiez les autres packages sur la vue des tâches de calcul haute performance et mentionnés dans les autres réponses. Les packages que je mentionne ci-dessus sont simplement ceux avec lesquels j'ai eu plus d'expérience.

32
jthetzel

Je pense que la quantité de données que vous pouvez traiter est plus limitée par vos compétences en programmation qu'autre chose. Bien que de nombreuses fonctionnalités standard soient axées sur l'analyse de la mémoire, la découpe de vos données en morceaux aide déjà beaucoup. Bien sûr, cela prend plus de temps à programmer que de récupérer le code R standard, mais souvent c'est tout à fait possible.

La découpe des données peut par exemple être effectuée à l'aide de read.table ou readBin qui ne prennent en charge que la lecture d'un sous-ensemble des données. Alternativement, vous pouvez jeter un œil à la vue des tâches de calcul haute performance pour les packages qui offrent des fonctionnalités prêtes à l'emploi en mémoire. Vous pouvez également mettre vos données dans une base de données. Pour les données raster spatiales, l'excellent package raster fournit une analyse de mémoire insuffisante.

8
Paul Hiemstra

Pour les tâches d'apprentissage automatique, je peux recommander l'utilisation du package biglm , utilisé pour "Régression pour les données trop volumineuses pour tenir en mémoire". Pour utiliser R avec des données vraiment volumineuses, on peut utiliser Hadoop comme backend puis utiliser le package rmr pour effectuer une analyse statistique (ou autre) via MapReduce sur un cluster Hadoop.

8
Grega Kešpret

Tout dépend des algorithmes dont vous avez besoin. S'ils peuvent être traduits sous la forme incrémentielle (lorsque seule une petite partie des données est nécessaire à un moment donné, par exemple pour Naive Bayes, vous ne pouvez conserver en mémoire que le modèle lui-même et l'observation en cours de traitement), alors la meilleure suggestion est d'effectuer un apprentissage automatique de manière incrémentielle, en lisant de nouveaux lots de données à partir du disque.

Cependant, de nombreux algorithmes et en particulier leurs implémentations nécessitent vraiment l'ensemble des données. Si la taille de l'ensemble de données vous convient sur le disque (et les limitations du système de fichiers), vous pouvez utiliser mmap package qui permet de mapper le fichier sur le disque en mémoire et l'utiliser dans le programme. Notez cependant que les opérations de lecture-écriture sur disque sont coûteuses et que R aime parfois déplacer fréquemment les données dans les deux sens. Donc sois prudent.

Si vos données ne peuvent pas être stockées même sur votre disque dur, vous devrez utiliser des systèmes d'apprentissage automatique distribués. Un tel système basé sur R est Revolution R qui est conçu pour gérer de très grands ensembles de données. Malheureusement, ce n'est pas open source et coûte beaucoup d'argent, mais vous pouvez essayer d'obtenir licence académique gratuite . Comme alternative, vous pourriez être intéressé par Java basé sur Apache Mahout - pas si élégant, mais une solution très efficace, basée sur Hadoop et incluant de nombreux algorithmes importants.

7
ffriend

Si la mémoire n'est pas suffisante, une solution est de pousser les données sur le disque et d'utiliser l'informatique distribuée. Je pense que RHadoop (R + Hadoop) peut être l'une des solutions à aborder avec un ensemble de données volumineux.

3
yanbohappy