Joh*_*son 41 signal-processing r machine-learning bigdata
似乎R真的设计用于处理它可以完全进入内存的数据集.对于无法拉入内存的超大型数据集,建议使用哪些R软件包进行信号处理和机器学习?
如果R只是错误的方法,我会接受其他强大的免费建议(例如scipy,如果有一些很好的方法来处理非常大的数据集)
jth*_*zel 32
查看 CRAN上高性能计算任务视图的"大内存和内存不足数据"小节.bigmemory和ff是两个受欢迎的套餐.对于bigmemory(以及相关的biganalytics,and bigtabulate),bigmemory网站上有一些非常好的演示文稿,小插曲和Jay Emerson的概述.对于ff,我建议在ff网站上阅读AdlerOehlschlägel及其同事的优秀幻灯片演示文稿.
另外,考虑将数据存储在数据库中并以较小批量读取以进行分析.可能有许多方法需要考虑.首先,看看biglm软件包中的一些示例,以及Thomas Lumley的演示文稿.
并调查高性能计算任务视图中的其他包,并在其他答案中提到.我上面提到的包只是我碰巧有更多经验的包.
我认为您可以处理的数据量比编程技能更受限制.尽管许多标准功能都集中在内存分析中,但将数据切割成块已经有很大帮助.当然,这比编制标准R代码需要更多的时间来编程,但通常很有可能.
切换数据可以使用read.table或readBin来完成,它只支持读取数据的子集.或者,您可以查看高性能计算任务视图,以获得开箱即用的内存功能.您还可以将数据放入数据库中.对于空间栅格数据,优秀的栅格包提供了内存分析.
这一切都取决于您需要的算法.如果它们可以被翻译成增量形式(当在任何给定时刻只需要一小部分数据时,例如对于朴素贝叶斯,你只能在内存中保存模型本身和正在处理的当前观察),那么最好的建议是执行机器逐步学习,从磁盘读取新批次的数据.
但是,许多算法,特别是它们的实现确实需要整个数据集.如果数据集的大小适合您的磁盘(以及文件系统限制),则可以使用mmap包,该包允许将磁盘上的文件映射到内存并在程序中使用它.但是请注意,对磁盘的读写很昂贵,而R有时喜欢经常来回移动数据.所以要小心.
如果您的数据甚至无法存储在硬盘上,则需要使用分布式机器学习系统.一个这样的基于R的系统是Revolution R,它设计用于处理非常大的数据集.不幸的是,它不是开源的,花费了不少钱,但你可能会尝试获得免费的学术许可.作为替代方案,您可能对基于Java的Apache Mahout感兴趣- 不是那么优雅,但非常有效的解决方案,基于Hadoop并包括许多重要的算法.