R中非常大的数据集处理和机器学习的推荐包[关闭]

Posted

技术标签:

【中文标题】R中非常大的数据集处理和机器学习的推荐包[关闭]【英文标题】:Recommended package for very large dataset processing and machine learning in R [closed] 【发布时间】:2012-06-15 17:29:29 【问题描述】:

看起来 R 真的是为处理可以完全拉入内存的数据集而设计的。推荐哪些 R 包用于无法拉入内存的超大型数据集的信号处理和机器学习?

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

【问题讨论】:

查看 CRAN 上 high performance computing task view 的“大内存和内存不足数据”小节。 bigmemory 和 ff 是两个流行的软件包。此外,考虑将数据存储在数据库中并以较小的批次读取数据以进行分析。 【参考方案1】:

查看 CRAN 上 high performance computing task view 的“大内存和内存不足数据”小节。 bigmemory 和 ff 是两个流行的软件包。对于 bigmemory(以及相关的 biganalytics 和 bigtabulate),bigmemory website 有一些来自 Jay Emerson 的非常好的演示文稿、小插曲和概述。对于 ff,我建议阅读 Adler Oehlschlägel 及其同事在 ff website 上的精彩幻灯片演示。

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

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

【讨论】:

但是使用 ff、bigmemory 或数据库......你可以直接执行 R 或任何包提供的任何操作吗?还是只能运行ff、bigmemory或者数据库引擎已经实现的功能? (无需打破小块数据)。例如,我想对 50GB 的数字文件进行回归或计算中位数。或者我想应用 DBScan,或者只是想创建另一个向量,其中每个元素都表示为旧的 BB[i]=AA[i]*AA[i-1]+AA[i-2] 的一些操作。我可以用 R 和 ff、bigmemory 或任何数据库连接器做到这一点吗?【参考方案2】:

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

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

【讨论】:

【参考方案3】:

对于机器学习任务,我可以推荐使用 biglm 包,用于执行“数据太大而无法放入内存的回归”。要使用 R 处理真正的大数据,可以使用 Hadoop 作为后端,然后使用包 rmr 在 Hadoop 集群上通过 MapReduce 执行统计(或其他)分析。

【讨论】:

【参考方案4】:

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

但是,许多算法,尤其是它们的实现确实需要整个数据集。如果数据集的大小适合您的磁盘(和文件系统限制),您可以使用 mmap 包,该包允许将磁盘上的文件映射到内存并在程序中使用它。但是请注意,对磁盘的读写成本很高,而且 R 有时喜欢频繁地来回移动数据。所以要小心。

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

【讨论】:

使用 Revolution R,您可以在大型数据集上应用一些函数,但只能在 Revoscaler 包上实现的函数。您没有在大型数据集上使用任何 R 函数或包的通用方法。例如,如果您想运行 DBSCAN 集群,您需要使用 revoscaler(或类似软件包)提供的基本功能重写整个方法。【参考方案5】:

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

【讨论】:

以上是关于R中非常大的数据集处理和机器学习的推荐包[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

R中非常大的稀疏矩阵的列重新缩放

R程序中非常大的矩阵的svd

Kivy PyInstaller 在 Linux 中非常大的包大小

如何从cassandra中非常大的表中读取所有行?

Powershell 中非常大的 XML 文件

C/C++ 中非常大的静态数组的算术运算