將機器學習帶入Java與JavaScript等編程語言的五種方式
譯文在經(jīng)歷了數(shù)十年單純作為專業(yè)學科的潛伏期之后,機器學習突然之間在技術(shù)前沿與核心領域贏得了一席之地、并開始作為業(yè)務工具呈現(xiàn)在我們面前。不過目前***的難題是如何使其具備實效,特別是對于那些需要處理相關(guān)工作的開發(fā)人員與尚處在萌芽狀態(tài)的數(shù)據(jù)科學家們。
為了找到答案,我們整理出了一些最為常見且具備實用價值的開源機器學習工具,通過今天的文章與各位朋友共享。
Python: 數(shù)據(jù)科學家們紛紛投身于Python懷抱,希望利用它來作為R語言等分析型語言的開放式替代方案,目前也有不少企業(yè)雇主正積極尋找具備大數(shù)據(jù)處理經(jīng)驗的人才、其中熟練使用Python就是最重要的必備技能之一。有鑒于此,一直在不斷擴大的Python軟件名單中開始出現(xiàn)大量與機器學習密切相關(guān)的資源庫。
首先要提到的推薦選項就是scikit-learn(官方網(wǎng)站:http://scikit-learn.org/stable/)。它能夠加載至算法與模塊當中,在GitHub上受到了廣泛贊賞(fork版本數(shù)量接近2000),而且贏得了眾多業(yè)界巨頭的青睞。另一位緊隨其后的選手是PyBrain(官方網(wǎng)站:http://www.pybrain.org/),它的設計目的在于降低使用難度并提供與其它強大工具相對接的能力。顧名思義,PyBrain的關(guān)注重點在于神經(jīng)網(wǎng)絡與非監(jiān)督式學習,它同時也提供一套用于培訓與重新定義算法的機制。
Go: 作為谷歌打造的系統(tǒng)語言,Go的設計重點在于并行機制,而這似乎正是最適合編寫機器學習庫的理想環(huán)境。雖然目前與之相關(guān)的庫項目規(guī)模尚小甚至可以說是剛剛萌芽,但也已經(jīng)有一些通用型方案值得加以關(guān)注。其中最受推崇的要婁GoLearn(官方網(wǎng)站:https://github.com/sjwhitworth/golearn),其開發(fā)者將其描述為一套“內(nèi)置電池”的機器學習庫。它提供過濾、分類以及回歸分析等多種工具。另一套較小且更為基礎的庫是mlgo(官方網(wǎng)站:https://code.google.com/p/mlgo/),雖然目前它能提供的算法數(shù)量還少得可憐,但計劃在未來推出更多相關(guān)成果。
Java on Hadoop: Mahout(在印地語中意味著‘象騎兵’,官方網(wǎng)站:https://mahout.apache.org/)當中包含有多種常見的機器學習方案,足以在每一位用戶偏愛的大數(shù)據(jù)框架中實際起效。這款軟件包以算法為關(guān)注重點而非方法,因此使用者需要對算法具備一定程度的理解。換句話來說,如果大家認真學習,肯定不難看出其各部分功能是如何被整合在一起的;舉例來說,大家完全可以通過寥寥數(shù)行代碼構(gòu)建起基于用戶的推薦系統(tǒng)。
Cloudera公司推行的Oryx(官方網(wǎng)站:https://github.com/cloudera/oryx)又是另一個基于Hadoop的機器學習項目,其特性在于通過交付實時流結(jié)果而非處理批量作業(yè)來對Mahout處理結(jié)果進行進一步分析。遺憾的是,目前該項目尚處于初始階段——注意,這只是個項目而非實際產(chǎn)品——但它不斷演變與改善的步伐為自己贏得了獲取關(guān)注的資本。
Java: 與前面提到的、主要面向Hadoop的Mahout不同,還有其它一些面向Java機器學習庫同樣具備廣泛的使用受眾。由新西蘭懷卡托大學創(chuàng)建的Weka(官方網(wǎng)站:http://www.cs.waikato.ac.nz/~ml/weka/)就是一款工作臺類的應用程序,它在常見的算法集合當中加入了虛擬化與數(shù)據(jù)挖掘功能。對于那些希望為工作內(nèi)容打造一套前端并有意利用Java進行初始開發(fā)的用戶來說,Weka可能是各位起步的***選擇。另一套更加傳統(tǒng)的庫,Java-ML(官方網(wǎng)站:http://java-ml.sourceforge.net/)也能確切起效,但它更適合那些已經(jīng)習慣了將Java與機器學習配合使用的朋友。
JavaScript: 大家可能都聽說過“亞特伍德定律”這個笑話,大意是說任何能夠由JavaScript所編寫的內(nèi)容最終都會由JavaScript進行編寫,這一理論在機器學習庫領域同樣正確。當然,目前JavaScript編寫而成的方案在這一領域數(shù)量仍然相對較小——其中大多數(shù)選項都僅僅是單一算法而非完整的庫——但已經(jīng)有部分實用性工具漸漸脫穎而出。ConvNetJS(官方網(wǎng)站:http://cs.stanford.edu/people/karpathy/convnetjs/)允許大家直接在瀏覽器當中進行神經(jīng)網(wǎng)絡培訓、從而實現(xiàn)深層學習,而名為brain(官方網(wǎng)站:https://github.com/harthur/brain)的項目則能夠以可安裝NPM模塊的形式交付神經(jīng)網(wǎng)絡。此外,Encog(官方網(wǎng)站:https://github.com/encog/encog-javascript)庫同樣值得關(guān)注,而且它適用于多種平臺:Java、C#、C/C++以及JavaScript。