大规模机器学习

28

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

哪种是最好的实现方式呢?我在机器学习方面有经验,但对如何处理巨大数据集没有太多经验。有没有可扩展和可定制的机器学习库,利用MapReduce基础架构?我很偏爱C++,但Java和Python也可以。亚马逊、Azure或自己的数据中心(我们负担得起)都可以。

8个回答

22
除非你尝试学习的分类状态空间非常大,否则我预计在一个以文本挖掘为重点的数据集中有100-1000亿条记录或训练样本,存在着显著的冗余。粗略估计,我怀疑只需要不到1-2%的随机样本子集就足以学习可靠的分类器,在交叉验证测试中表现良好。
快速进行文献搜索,找到了以下相关论文。Tsang的论文声称在n个训练样本上具有O(n)的时间复杂度,并且与之相关的软件是LibCVM toolkit。Wolfe的论文描述了一种基于MapReduce的分布式EM方法。
最后,在NIPS 2009会议上有一个Large-Scale Machine Learning workshop,看起来有很多有趣和相关的演示。
参考文献:
Ivor W. Tsang, James T. Kwok, Pak-Ming Cheung (2005). "Core Vector Machines: Fast SVM Training on Very Large Data Sets", Journal of Machine Learning Research, vol 6, pp 363–392.

J Wolfe, A Haghighi, D Klein (2008). "非常大的数据集的完全分布式EM算法", 机器学习国际会议第25届会议论文集, pp 1184-1191.

Olivier Camp, Joaquim B. L. Filipe, Slimane Hammoudi和Mario Piattini (2005). "使用支持向量机算法挖掘非常大的数据集", 企业信息系统V, Springer Netherlands, pp 177-184.


14

它能在Windows上运行吗? - mrgloom


1

我不知道有哪些机器学习库可以支持1000亿至1万亿条记录,那是非常极端的情况,所以我不指望能找到现成的解决方案。但我建议你看一下 NetFlix 奖项获得者的代码:http://www.netflixprize.com//community/viewtopic.php?id=1537

NetFlix 奖项有超过1亿个参赛作品,虽然没有你的数据集那么庞大,但你可能会发现他们的解决方案适用。BelKor 团队所做的是将多个算法进行组合(类似于集成学习),并对每个算法的"预测"或输出进行加权。


Mahout/hadoop支持这些规模。 - David Parks

1

我不知道有任何使用map/reduce的机器学习库。也许您可以使用机器学习库和Map/Reduce库一起?您可能需要研究一下Hadoop的Map/Reduce: http://hadoop.apache.org/mapreduce/

您将不得不实现reduce和map方法。您使用了这么多技术可能会使这个过程变得复杂。

您可以在自己的群集上运行它,或者如果您正在进行研究,可以看看BOINC(http://boinc.berkeley.edu/)。

另一方面,也许您可以减少数据集。我不知道您正在进行什么训练,但是100亿条记录中必定存在一些冗余...


Mahout是一个机器学习库,它使用Hadoop进行处理。 - David Parks

1

查看http://hunch.net/?p=1068了解Vowpal Wabbit的相关信息;它是一个用于大规模应用的随机梯度下降库。



0
我有个朋友曾经做过类似的项目。他使用了Perl进行文本挖掘,使用Matlab进行贝叶斯方法、潜在语义分析和高斯混合等技术。

仅使用一个系统并不算大规模,也不是 OP 所要求的。 - Staffan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接