Java 大规模机器学习

Java 大规模机器学习,java,c++,machine-learning,mapreduce,text-mining,Java,C++,Machine Learning,Mapreduce,Text Mining,我需要在一个大数据集(100-1000亿条记录)上运行各种机器学习技术 问题主要围绕文本挖掘/信息提取,包括各种核心技术,但并不限于此(我们使用一些贝叶斯方法、自举、梯度增强、回归树——许多不同的问题和解决方法) 最好的实现方式是什么?我在ML方面很有经验,但对于如何处理大型数据集没有太多经验 是否有利用MapReduce基础设施的可扩展和可定制的机器学习库 对C++有强烈的偏爱,但是java和python是OK的 亚马逊Azure还是自己的数据中心(我们能负担得起)?我的一个朋友也参与过类似的

我需要在一个大数据集(100-1000亿条记录)上运行各种机器学习技术 问题主要围绕文本挖掘/信息提取,包括各种核心技术,但并不限于此(我们使用一些贝叶斯方法、自举、梯度增强、回归树——许多不同的问题和解决方法)

最好的实现方式是什么?我在ML方面很有经验,但对于如何处理大型数据集没有太多经验 是否有利用MapReduce基础设施的可扩展和可定制的机器学习库 对C++有强烈的偏爱,但是java和python是OK的
亚马逊Azure还是自己的数据中心(我们能负担得起)?

我的一个朋友也参与过类似的项目。他使用perl进行文本挖掘,使用matlab进行贝叶斯方法、潜在语义分析和高斯混合等技术

我不知道有哪种ML库可以支持100亿到1000亿条记录,这有点极端,所以我不希望找到现成的。我建议大家看看NetFlix的获奖者:


NetFlix prize有超过1亿条参赛作品,因此虽然它没有您的数据集那么大,但您仍然可以找到适用的解决方案。该团队所做的是组合多种算法(类似于集成学习),并对每种算法的“预测”或输出进行加权。

我不知道有任何使用map/reduce的ML库。也许您能够同时使用ML库和Map/Reduce库?您可能需要查看Hadoop的Map/Reduce:

您必须实现reduce和map方法。事实上,您使用了如此多的技术,这可能会使问题复杂化

您可以在自己的集群上运行它,或者如果您正在进行研究,您可以研究BOINC()


另一方面,也许你可以减少你的数据集。我不知道你们在训练什么,但在100亿条记录中肯定有一些冗余

是您所要寻找的。

除非您试图了解的分类状态空间非常大,否则我认为在一个以文本挖掘为中心的数据集中,有100-1000亿条记录或训练样本,会有大量冗余。作为粗略的猜测,我怀疑人们需要比1-2%的随机样本子集多得多的样本来学习可靠的分类器,这些分类器在交叉验证测试中表现良好

通过快速的文献检索,得到了以下相关论文。曾荫权的论文声称,O(n)训练样本的时间复杂度为n,并且有与之相关的软件可用作。Wolfe论文描述了一种基于MapReduce的分布式EM方法

最后,在2009年NIPS会议上,似乎有很多有趣和相关的介绍

参考资料

曾文华、郭炳良、张伯明(2005)。“,《机器学习研究杂志》,第6卷,第363-392页

J Wolfe,A Haghei,D Klein(2008)。“,《第25届机器学习国际会议记录》,第1184-1191页


奥利维尔·坎普、若阿金·菲利佩、斯利曼·哈穆迪和马里奥·皮亚蒂尼(2005年)。“”,企业信息系统V,荷兰斯普林格,第177-184页。

请查看Vowpal Wabbit的相关信息;这是一个面向大规模应用的随机梯度下降库。

请参阅此大规模机器学习资源(课程、论文等)列表:

最新答案,但这里有一个关于大规模数据挖掘和机器学习的好链接:

仅使用一个系统并不算是大规模的,而且这也不是OP要求的。它在Windows上工作吗?Mahout/hadoop支持这些规模Mahout是一个使用hadoop进行处理的机器学习库