R中超大型数据集处理和机器学习的推荐软件包
machine-learning
r
4
0

看起来R确实是为处理可以完全拉入内存的数据集而设计的。对于无法拉入内存的超大型数据集,建议使用哪些R包进行信号处理和机器学习?

如果R只是这样做的错误方法,那么我愿意接受其他可靠的免费建议(例如,如果有一些很好的方法来处理非常大的数据集,则建议使用scipy)

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

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

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

如果即使在硬盘驱动器上也无法存储数据,则需要使用分布式机器学习系统。一种基于R的系统就是Revolution R ,它旨在处理非常大的数据集。不幸的是,它不是开源的,花费很多钱,但是您可以尝试获得免费的学术许可证 。作为替代,您可能对基于Java的Apache Mahout感兴趣-它不是那么优雅,但是基于Hadoop并包含许多重要算法的非常有效的解决方案。

收藏
评论

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

收藏
评论

我认为您可以处理的数据量更受编程技能的限制,而不是其他任何事情。尽管内存分析着重于许多标准功能,但将数据切成块已经大有帮助。当然,与拾取标准R代码相比,这需要花费更多的时间进行编程,但是通常这是完全可能的。

可以使用read.table或readBin(仅支持读取数据的一个子集)完成数据的扩展。另外,您可以查看高性能计算任务视图,了解那些开箱即用的内存功能。您也可以将数据放入数据库中。对于空间栅格数据,出色的栅格数据包提供了内存不足分析。

收藏
评论

查看 CRAN上高性能计算任务视图的“大内存和内存不足数据”小节。 bigmemoryff是两个流行的软件包。对于bigmemory(以及相关的biganalyticsbigtabulate ), bigmemory网站上有一些来自Jay Emerson的非常好的演示文稿,小插图和概述。对于ff,我建议阅读ff网站上的AdlerOehlschlägel和同事出色的幻灯片演示。

另外,请考虑将数据存储在数据库中并分批读取以进行分析。可能有许多方法可以考虑。首先,请仔细阅读biglm软件包中的一些示例以及Thomas Lumley的演示文稿

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

收藏
评论

对于机器学习任务,我建议使用biglm程序包, 程序包用于执行“对于无法容纳在内存中的数据进行回归”。对于将R与真正的大数据一起使用,可以将Hadoop用作后端,然后使用rmr包通过Hadoop集群上的MapReduce执行统计(或其他)分析。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号