我是一名数学家,偶尔会做一些统计/机器学习分析咨询项目。我可以访问的数据通常在较小的一侧,最多几百兆字节(几乎总是远远少于),但我想学习更多关于处理和分析千兆字节/太字节数据的数据。我需要知道什么,有什么好的资源可供学习?
答案 0 :(得分:2)
如果您有任何问题,请告诉我:-)评论会在这个问题上提醒我。
答案 1 :(得分:0)
我已经完成了一些大规模的机器学习(3-5GB数据集),所以这里有一些见解:
首先,存在大规模的物流问题。你可以将所有数据加载到内存中吗?使用Java和64位JVM,您可以访问尽可能多的RAM:例如,命令行参数-Xmx8192M
将允许您访问8GB(如果您有这么多)。作为Java应用程序的Matlab也可以从中受益并使用相当大的数据集。
更重要的是,您对数据运行的算法。有可能标准实现会期望内存中的所有数据。您可能必须自己实现工作集方法,在此处将数据交换进入磁盘,并且一次只处理一部分数据。这些有时被称为 chunking , batch 甚至 incremental 算法,具体取决于上下文。
你怀疑很多算法实际上没有扩展,所以你可能不得不寻求一个近似的解决方案。好消息是,对于几乎所有算法,您都可以找到处理近似和/或讨论大规模解决方案的研究论文。坏消息是你很可能不得不自己实施这些方法。
答案 2 :(得分:0)
Hadoop非常棒,但设置起来可能很麻烦。这是迄今为止我读过的有关Hadoop设置的最佳文章。我强烈推荐它: http://www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_%28Single-Node_Cluster%29
Clojure建立在Java之上,所以它不可能比Java更快。但是,它是少数几种能够很好地共享内存的语言之一,可能有用也可能没用。我不是一个数学家,但似乎大多数数学计算是非常可并行化的,几乎不需要线程共享内存。无论哪种方式,您可能需要查看Incanter,这是Clojure的统计计算库,以及clojure-hadoop,这使得编写Hadoop作业的难度大大减轻。
在语言方面,我发现性能差异最终成为不变因素。只需找到您喜欢的语言并专注于改进算法就好了。然而,根据一些枪战cited by Peter Norvig(向下滚动到五颜六色的桌子,你可能想要回避Python和Perl,因为他们对阵列的困惑。
简而言之,NoSQL非常适合非结构化/任意结构化数据,而SQL / RDBMS对于结构化数据来说非常好(或至少可以容忍)。在RDBMS中更改/添加字段是很昂贵的,所以如果这种情况发生很多,你可能会想要避开它们。
然而,在你的情况下,似乎你将批量处理大量数据,然后回到答案,而不是有数据,你会定期提问?您可以在Hadoop中处理CSV /文本文件。除非您需要一种高效的方式来动态访问有关数据的任意信息,否则我不确定SQL或NoSQL是否有用。