首页 文章

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

提问于
浏览
40

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

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

5 回答

  • 8

    看一下CRAN上high performance computing task view的"Large memory and out-of-memory data"小节 . bigmemoryff是两个受欢迎的套餐 . 对于bigmemory(以及相关的biganalyticsbigtabulate),bigmemory website有一些非常好的演示,小插曲和Jay Emerson的概述 . 对于ff,我建议阅读AdlerOehlschlägel及其同事在ff website上的优秀幻灯片演示 .

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

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

  • 3

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

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

  • 7

    对于机器学习任务,我建议使用biglm包,用于做"Regression for data too large to fit in memory" . 对于使用具有非常大数据的R,可以使用Hadoop作为后端,然后使用包rmr在Hadoop集群上通过MapReduce执行统计(或其他)分析 .

  • 31

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

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

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

  • 8

    如果内存不够,一种解决方案是将数据推送到磁盘并使用分布式计算 . 我认为RHadoop(R Hadoop)可能是解决大量数据集的解决方案之一 .

相关问题