推荐用于R中非常大的数据集处理和机器学习的软件包

Joh*_*son 41 signal-processing r machine-learning bigdata

似乎R真的设计用于处理它可以完全进入内存的数据集.对于无法拉入内存的超大型数据集,建议使用哪些R软件包进行信号处理和机器学习?

如果R只是错误的方法,我会接受其他强大的免费建议(例如scipy,如果有一些很好的方法来处理非常大的数据集)

jth*_*zel 32

查看 CRAN上高性能计算任务视图的"大内存和内存不足数据"小节.bigmemoryff是两个受欢迎的套餐.对于bigmemory(以及相关的biganalytics,and bigtabulate),bigmemory网站上有一些非常好的演示文稿,小插曲和Jay Emerson的概述.对于ff,我建议在ff网站上阅读AdlerOehlschlägel及其同事的优秀幻灯片演示文稿.

另外,考虑将数据存储在数据库中并以较小批量读取以进行分析.可能有许多方法需要考虑.首先,看看biglm软件包中的一些示例,以及Thomas Lumley的演示文稿.

并调查高性能计算任务视图中的其他包,并在其他答案中提到.我上面提到的包只是我碰巧有更多经验的包.


Pau*_*tra 8

我认为您可以处理的数据量比编程技能更受限制.尽管许多标准功能都集中在内存分析中,但将数据切割成块已经有很大帮助.当然,这比编制标准R代码需要更多的时间来编程,但通常很有可能.

切换数据可以使用read.table或readBin来完成,它只支持读取数据的子集.或者,您可以查看高性能计算任务视图,以获得开箱即用的内存功能.您还可以将数据放入数据库中.对于空间栅格数据,优秀的栅格包提供了内存分析.


Gre*_*ret 8

对于机器学习任务,我可以推荐使用biglm软件包,用于"对数据太大而不适合内存的回归".对于使用具有非常大数据的R,可以使用Hadoop作为后端,然后使用包rmr在Hadoop集群上通过MapReduce执行统计(或其他)分析.


ffr*_*end 7

这一切都取决于您需要的算法.如果它们可以被翻译成增量形式(当在任何给定时刻只需要一小部分数据时,例如对于朴素贝叶斯,你只能在内存中保存模型本身和正在处理的当前观察),那么最好的建议是执行机器逐步学习,从磁盘读取新批次的数据.

但是,许多算法,特别是它们的实现确实需要整个数据集.如果数据集的大小适合您的磁盘(以及文件系统限制),则可以使用mmap包,该包允许将磁盘上的文件映射到内存并在程序中使用它.但是请注意,对磁盘的读写很昂贵,而R有时喜欢经常来回移动数据.所以要小心.

如果您的数据甚至无法存储在硬盘上,则需要使用分布式机器学习系统.一个这样的基于R的系统是Revolution R,它设计用于处理非常大的数据集.不幸的是,它不是开源的,花费了不少钱,但你可能会尝试获得免费的学术许可.作为替代方案,您可能对基于Java的Apache Mahout感兴趣- 不是那么优雅,但非常有效的解决方案,基于Hadoop并包括许多重要的算法.