9

爲了完成各種標準的機器學習任務,我已經使用Amazon Elastic MapReduce創建了自己。過去我廣泛使用Python進行本地機器學習,而且我不知道Java。是否有任何分佈式機器學習庫在Hadoop中使用Python?

據我所知,目前還沒有很好開發的用於分佈式機器學習的Python庫。另一方面,Java有Cloudera的Apache Mahout和最近的Oryx

從本質上看,我必須在兩個選項之間進行選擇。 Slog通過並行化我自己的算法與Hadoop streamingPython wrapper for Hadoop之一一起使用,直到正式的庫存在或跳轉到Java,以便我可以使用Mahout/Oryx。在編寫自己的MapReduce字數統計代碼和編寫自己的MapReduce SVM之間有着天壤之別!即使藉助了諸如this等優秀教程。

我不知道哪個是更明智的選擇,所以我的問題是:

A)有一些Python庫我已經錯過了這將是有用的?如果沒有,你知道是否有任何正在開發的產品在不久的將來會有用嗎? B)如果上面的答案是否定的,那麼我的時間會更好地花在Java上嗎?

+0

檢出:http://stackoverflow.com/questions/4819437/javas-mahout-equivalent-in-python – alexplanation

+0

問題要求我們**推薦或找到一個工具,圖書館或最喜愛的異地資源**因爲他們傾向於吸引自以爲是的答案和垃圾郵件,所以不適合堆棧溢出。相反,[描述問題](http://meta.stackexchange.com/q/139399/)以及迄今爲止已經做了什麼來解決它。 –

+0

繼續[軟件推薦](http://area51.stackexchange.com/proposals/60887/software-recommendations?referrer=L1kFo5C96mMK8IujJZeI4A2)。 – user

回答

9

我不知道任何可以在Python中用於本機機器學習的庫,但是一個簡單的解決方案是使用jpype模塊,它基本上允許您在Py​​thon代碼中與Java進行交互。

例如,你可以啓動一個JVM這樣的:

from jpype import * 

jvm = None 

def start_jpype(): 
    global jvm 
    if (jvm is None): 
     cpopt="-Djava.class.path={cp}".format(cp=classpath) 
     startJVM(jvmlib,"-ea",cpopt) 
     jvm="started" 

有在這裏的話題,這也解釋瞭如何使用k均值聚類使用亨利馬烏您的Python代碼very good tutorial

4

您可以試用Python Hadoop streaming使用Python進行Hadoop流式傳輸。

+0

正如我在OP中提到的那樣,在hadoop中使用python有很多f/w - 但我正在尋找分佈式的本地實現python ML –

1

問題的答案:

  1. 據我所知,沒有,Python有機器學習,廣泛收集和映射簡化模塊,但不ML + MR

  2. 我要說的是,因爲你是一個沉重的程序員,你應該能夠與Java趕上相當快的,如果你不與那些討厭(很抱歉沒有犯罪)J2EE構架涉及

1

我將重新當您使用EMR時,請使用Java進行推薦。

首先,它很簡單,它的設計工作方式。如果你打算在Windows下玩C#,如果你在apache上使用PHP創建web服務。當您在EMR中運行MapReduce Hadoop時,使用Java。其次,所有的工具都可以在Java中使用,例如AWS SDK。我經常在Netbeans,Cygwin(在Windows上)和s3cmd(在cygwin中)的幫助下,在EMR中快速開發MapReduce作業。我使用netbeans來構建我的MR jar,並將cygwin + s3cmd複製到我的s3目錄以運行emr。然後,我還使用AWS SDK編寫了一個程序,用我的配置啓動我的EMR集羣並運行我的jar。

第三,有很多Hadoop的調試工具(通常需要MAC或Linux操作系統爲他們的工作,雖然)爲Java

請參閱here創建與Maven Hadoop的一個新NetBeans項目。

-2

A)無

B)無

你什麼其實想要做的是跳到斯卡拉如果你想做任何鐵桿ML,那麼你也想忘記使用Hadoop和跳轉到星火。 Hadoop是一個MapReduce框架,但ML算法不一定映射到這個數據流結構,因爲它們通常是迭代的。這意味着許多ML算法將導致大量的MapReduce階段 - 每個階段都有巨大的讀寫磁盤開銷。

Spark是一種內存分佈式框架,允許數據在內存中以幾個數量級的速度增長。

現在斯卡拉是世界上最好的語言,尤其是大數據和ML語言。它不是動態類型的,但具有類型推斷和隱式轉換,並且它比Java和Python更加簡潔。這意味着你可以在Scala中非常快地編寫代碼,而且代碼是可讀和可維護的。

最後,斯卡拉功能強大,自然適合數學和並行化。這就是爲什麼所有關於大數據和ML的前沿工作都在Scala中完成的原因;例如燙傷,Scoobi,Scrunch和Spark。 R代碼將成爲過去。