首页 » 机器学习实战 » 机器学习实战全文在线阅读

《机器学习实战》15.4 MapReduce上的机器学习

关灯直达底部

在10台机器上使用MapReduce并不能等价于当前机器10倍的处理能力。在MapReduce代码编写合理的情况下,可能会近似达到这样的性能,但不是每个程序都可以直接提速的,map和reduce函数需要正确编写才行。

很多机器学习算法不能直接用在MapReduce框架上。这也没关系,正如老话所说:“需求是发明之母。”科学家和工程师中的一些先驱已完成了大多数常用机器学习算法的MapReduce实现。

下面的清单简要列出了本书常用的机器学习算法和对应的MapReduce实现。

  • 简单贝叶斯——它属于为数不多的可以很自然地使用MapReduce的算法。在MapReduce中计算加法非常容易,而简单贝叶斯正需要统计在某个类别下某特征的概率。因此可以将每个指定类别下的计算作业交由单个的mapper处理,然后使用reducer来将结果加和。

  • K-近邻算法——该算法首先试图在数据集上找到相似向量,即便数据集很小,这个步骤也将花费大量的时间。在海量数据下,它将极大地影响日常商业周期的运转。一个提速的办法是构建树来存储数据,利用树形结构来缩小搜索范围。该方法在特征数小于10的情况下效果很好。高维数据下(如文本、图像和视频)流行的近邻查找方法是局部敏感哈希算法。

  • 支持向量机(SVM)——第6章使用的Platt SMO算法在MapReduce框架下难以实现。但有一些其他SVM的实现使用随机梯度下降算法求解,如Pegasos算法。另外,还有一个近似的SVM算法叫做最邻近支持向量机(proximal SVM),求解更快并且易于在MapReduce框架下实现1。

  • 奇异值分解——Lanczos算法是一个有效的求解近似特征值的算法。该算法可以应用在一系列MapReduce作业上,从而有效地找到大矩阵的奇异值。另外,该算法还可以应用于主成分分析。

  • K-均值聚类——个流行的分布式聚类方法叫做canopy聚类,可以先调用canopy聚类法取得初始的k个簇,然后再运行k-均值聚类方法。

1. Glenn Fung, Olvi L. Mangasarian, “PSVM: Proximal Support Vector Machine,” [http://www.cs.wisc.edu/dmi/ svm/psvm/](http://www.cs.wisc.edu/dmi/ svm/psvm/).

如果读者有兴趣了解更多机器学习方法的MapReduce实现,可以访问Apache的Mahout项目主页(http://mahout.apache.org/)以及参考Mahout in Action一书。其中Mahout项目以Java语言编写,该书也对处理大规模数据的实现细节做了很详细的介绍。另一个关于MapReduce很棒的资源是Jimmy Lin和Chris Dyer写的Data Intensive Text Processing with Map/Reduce一书。

接下来将介绍一个可以运行MapReduce作业的Python工具。