推荐用于R中非常大的数据集处理和机器学习的软件包
看起来R实际上是devise来处理可以完全放入内存的数据集。 什么R包被推荐用于非常大的数据集上的信号处理和机器学习,这些数据集不能被拉入内存?
如果R完全是这样做的错误的方法,我可以接受其他强大的免费build议(例如,如果有一些很好的方法来处理非常大的数据集,scipy)
查看 CRAN 高性能计算任务视图的“大内存和内存不足数据”部分。 bigmemory和ff是两个stream行的软件包。 对于大内存(以及相关的biganalytics和bigtabulate ),大内存网站有几个非常好的介绍,小插曲和Jay Emerson的概述。 对于ff,我build议阅读AdlerOehlschlägel及其同事在ff网站上的优秀幻灯片演示。
另外,考虑将数据存储在数据库中,然后读取较小批量的数据进行分析。 可能有很多方法需要考虑。 为了开始,我们看一下biglm包中的一些例子,以及Thomas Lumley的介绍 。
然后在高性能计算任务视图上调查其他软件包,并在其他答案中提到。 上面提到的软件包只是我碰巧有更多经验的软件包。
我认为你所能处理的数据量比编程技能更受限于其他任何东西。 尽pipe在内存分析中有很多标准function,但是将数据分割成块已经有很大的帮助。 当然,这比编写标准的R代码花费更多的时间进行编程,但通常情况下这是很有可能的。
切割数据可以使用read.table或readBin来完成,只读取数据的一个子集。 或者,您可以查看高性能计算任务视图,以查看是否提供即用即用的内存不足function的软件包。 你也可以把你的数据放在一个数据库中。 对于空间栅格数据,优秀的栅格包提供了内存不足分析。
对于机器学习任务,我可以推荐使用biglm软件包,用来做“回归数据太大以适应内存”。 对于使用真正大数据的R,可以使用Hadoop作为后端,然后使用软件包rmr通过Hadoop集群上的MapReduce执行统计(或其他)分析。
这一切都取决于你需要的algorithm。 如果可以将它们翻译成增量forms(在任何特定时刻只需要一小部分数据,例如对于朴素贝叶斯,只能记忆模型本身,并且正在处理当前观察),那么最好的build议是执行机器逐步学习,从磁盘读取新批次的数据。
但是,许多algorithm,尤其是它们的实现都需要整个数据集。 如果数据集的大小适合磁盘(和文件系统限制),则可以使用mmap软件包,该软件包允许将磁盘上的文件映射到内存并在程序中使用它。 但是请注意,对磁盘的读写操作很昂贵,R有时候喜欢经常来回移动数据。 所以要小心。
如果您的数据无法存储在硬盘上,则需要使用分布式机器学习系统。 一个这样的基于R的系统是Revolution R ,它被devise来处理真正的大数据集。 不幸的是,这不是开源的,花了不less钱,但是你可能会尝试获得免费的学术许可 。 或者,您可能对基于Java的Apache Mahout感兴趣 – 不是那么优雅,但非常高效的解决scheme,基于Hadoop并包含许多重要的algorithm。
如果内存不够,一个解决scheme是将数据推送到磁盘并使用分布式计算。 我认为RHadoop(R + Hadoop)可能是解决大量数据集的解决scheme之一。