40 votes

Paquet recommandé pour le traitement de très grands ensembles de données et l’apprentissage automatique en 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 enregistrés en mémoire?

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

32voto

jthetzel Points 2349

Jetez un oeil à la "Grande capacité de mémoire et de capacité de mémoire de données" paragraphe de l' informatique de haute performance de la tâche de vue sur CRAN. bigmemory et ff sont deux packages populaires. Pour bigmemory (et les biganalytics, et bigtabulate), le bigmemory site a quelques très bonnes présentations, de capsules, et des aperçus de Jay Emerson. Pour les ff, je recommande la lecture de Adler Oehlschlägel et collègues de travail excellentes présentations de diapositives sur le ff site web.

Aussi, pensez à stocker les données dans une base de données et de la lecture dans de plus petits lots pour l'analyse. Il y a probablement n'importe quel nombre de façons. Pour commencer, consdier en regardant à travers quelques exemples dans le biglm , ainsi que cette présentation de Thomas Lumley.

Et n'étudier que les autres paquets sur le calcul de haute performance task view et mentionné dans les autres réponses. Les paquets que je mentionne ci-dessus sont tout simplement celles que j'ai déjà arrivé d'avoir plus d'expérience avec.

8voto

Paul Hiemstra Points 28390

Je pense que la quantité de données que vous pouvez processus est plus limitée par les compétences de programmation que n'importe quoi d'autre. Bien que beaucoup de fonctionnalité standard est axée sur la mémoire de l'analyse, de la découpe de vos données dans des blocs aide déjà beaucoup. Bien sûr, cela prend plus de temps à programmer que de ramasser standard R code, mais souvent il est tout à fait possible.

Découper les données peuvent pour exale être fait à l'aide de lire.table ou readBin qui prennent en charge uniquement de la lecture d'un sous-ensemble de données. Alternativement, vous pouvez prendre un coup d'oeil à l'informatique de haute performance task view pour les paquets qui délivre de la zone de mémoire de la fonctionnalité. Vous pouvez aussi mettre vos données dans une base de données. Pour spatiale des données raster, l'excellent raster paquet fournit la mémoire de l'analyse.

8voto

Grega Kešpret Points 1710

Pour les tâches d’apprentissage automatique, je peux recommander l’utilisation du paquet biglm , utilisé auparavant pour la "Régression des données trop volumineuses pour tenir en mémoire". Pour utiliser R avec de très grandes données, on peut utiliser Hadoop en tant que backend, puis utiliser le package rmr pour effectuer une analyse statistique (ou autre) via MapReduce sur un cluster Hadoop.

7voto

ffriend Points 10655

Tout dépend des algorithmes dont vous avez besoin. Si ils peuvent être traduits dans différentiels forme (quand seulement une petite partie des données est nécessaire à un moment donné, par exemple pour les Naive Bayes, vous pouvez tenir dans la mémoire que le modèle lui-même et d'observation actuels en cours de traitement), alors la meilleure suggestion est d'effectuer l'apprentissage de la machine de manière incrémentielle, la lecture de nouveaux lots de données à partir du disque.

Cependant, de nombreux algorithmes et surtout de leurs implémentations vraiment besoin de l'ensemble du jeu de données. Si la taille de la base de données vous convient le disque (et les limitations de système de fichiers), vous pouvez utiliser mmap package qui permet de mapper le fichier sur le disque à la mémoire et à l'utiliser dans le programme. Notez cependant, que lisez-les écritures sur le disque sont chères, et les R aime parfois à se déplacer les données fréquemment. Donc, soyez prudent.

Si vos données ne peuvent être conservées même sur le disque dur, vous aurez besoin d'utiliser distribué machine de systèmes d'apprentissage. L'un de ces R-système, c'est la Révolution de R qui est conçu pour gérer de très grandes bases de données. Malheureusement, il n'est pas open source et coûte beaucoup d'argent, mais vous pouvez essayer d'obtenir gratuitement licence académique. Comme alternative, vous pouvez être intéressé par Java Apache Mahout - n'est pas élégant, mais très efficace, basée sur Hadoop et y compris de nombreux algorithmes importants.

3voto

yanbohappy Points 66

Si la mémoire est insuffisante, une solution consiste à transférer des données sur un disque et à utiliser l’informatique distribuée. Je pense que RHadoop (R + Hadoop) pourrait être l’une des solutions à prendre en compte avec un jeu de données volumineux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X