讀古今文學網 > 機器學習實戰 > 15.4 MapReduce上的機器學習 >

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工具。