python有大量機器學習庫,但是不能結合hadoop,該如何實現大規模的機器學習?

python有大量機器學習庫,但是不能結合hadoop,該如何實現大規模的機器學習?


並不是所有的機器學習演算法都能夠並行化的,大規模機器學習有專門的庫,Hadoop上的mahout,Spark上有SparkML


最近在學習spark 的mllib,分享一下心得吧。上面有朋友說的很對,python 庫裡面的機器學習演算法很多並不適合併行處理。

不過個人認為,spark的mllib絕對是非常有潛力,值得我們去學習的一個工具。首先是spark為我們提供了一個強健,廉價的分散式處理平台。傳統的機器學習大量使用GPU,雖然並行處理能力強大,但是昂貴,而且開發難度大。Spark相對成本,學習曲線要低許多。更重要的一點是,Spark生態系統目前是欣欣向榮。很多演算法正在開發中,如果目前的版本中沒有你期望的演算法,你可以關注一下mllib正在開發的中的一些功能(Issue Navigator),甚至可以和developer聯繫,拿一個測試版先試試看。


現在比較靠譜的分散式機器學習是spark的mllib。

不要用python的已有的庫,不是分散式的沒用。

也不要用mahout,這貨極度坑爹,又慢又難改寫。


可以用mahout或者mllib(但是都比sklearn差很多),要麼就自己寫(基本上還不如mllib),就是這麼吐血


這取決於你用那種機器學習的演算法:

比如,你用svm,如果採用高斯核函數,就有兩個參數(這裡用c, g代替)需要設置,這個時候你可以採取網格搜索的手段,在一系列參數(c, g)的條件下進行訓練,這個時候你可以同時訓練好幾組數據,你可以用hadoop將任務分散到各個空閑的資源去

但是,如果你稍微了解一下svm演算法的本質,發現其實svm的primary形式就是求解一個線性代數,那麼,對其並行化就集中在如何利用多核心,多節點來求解線性代數的值,而這已經有無數的方案來解決。

因此,對於如何並行化處理大規模ML的問題,在於你自己對此類ML是否有足夠的了解,知道那些過程能夠並行化。


建模的時候並不是數據越多越好,數據多了反而雜訊多。如何選出合適的數據才是關鍵。


演算法和模型不是關鍵,其實數據和應用更關鍵,一般都是有個具體問題考慮如何解決,而且不是為了拿著鎚子找釘子。 而且一些機器學習演算法,hadoop實現的效率也不高。 真心要求性能的一般都是自己實現或者引入gpu啥的。


可以考慮用parameter server 加 spark 做大規模計算,這裡有個spark mllib的例子

Spark MLlib Example

大規模機器學習


可惜mllib的線性代數計算庫是不並行的


今天一直嘗試把sklearn像jieba一樣傳上HDFS,後來悲劇地失敗了。最終還是無法在mapper和reducer里調用sklearn包。看來的確要學一學mahout和mllib了


推薦閱讀:

從零到搭建一個能提供API介面的網站,過程是怎樣的?
定位後端開發,有哪些書籍值得推薦?
哪裡能找到 Python 視頻教程地址?
學完 VB 後學什麼編程語言更好?
Python用作後台開發語言在國內的前景?

TAG:Python | 機器學習 | Hadoop |