我需要在一个大型数据集(100亿到1000亿条记录)上运行各种机器学习技术。这些问题主要围绕文本挖掘/信息提取,包括各种核技术,但不限于此(我们使用了一些贝叶斯方法、自助法、梯度提升、回归树——许多不同的问题和解决方法)。
什么是最佳实现?我在机器学习方面经验丰富,但对如何处理大型数据集没有太多经验。有没有可扩展和可定制的利用MapReduce基础设施的机器学习库?强烈偏好C++,但Java和Python也可以。亚马逊、Azure还是自己的数据中心(我们负担得起)?
回答:
除非您尝试学习的分类状态空间非常大,否则我认为在专注于文本挖掘的数据集中,100亿到1000亿条记录或训练样本中存在显著的冗余。粗略估计,我怀疑只需要1-2%的随机样本子集就能学习到在交叉验证测试中表现良好的可靠分类器。
快速的文献搜索找到了以下相关论文。Tsang的论文声称对于n个训练样本,时间复杂度为O(n),并且有相关的软件可用,即LibCVM工具包。Wolfe的论文描述了一种基于MapReduce的分布式EM方法。
最后,在NIPS 2009会议上有一个大规模机器学习研讨会,看起来有很多有趣且相关的演讲。
参考文献
Ivor W. Tsang, James T. Kwok, Pak-Ming Cheung (2005). “核心向量机:在非常大的数据集上快速训练SVM“, 机器学习研究杂志, 第6卷, 第363-392页。
J Wolfe, A Haghighi, D Klein (2008). “完全分布式的EM方法用于非常大的数据集“, 第25届国际机器学习会议论文集, 第1184-1191页。
Olivier Camp, Joaquim B. L. Filipe, Slimane Hammoudi and Mario Piattini (2005). “使用支持向量机算法挖掘非常大的数据集“, 企业信息系统V, 荷兰Springer出版社, 第177-184页。