值得mark的11個開源機器學習專案

edithfang發表於2014-12-09
垃圾郵件過濾、人臉識別、推薦引擎——當你有一個大資料集並且希望利用它們執行預測分析和模式識別,機器學習是必經之路。這門科學,計算機可以在沒有事先規劃的前提下自主學習、分析和運算元據,現在越來越多的開發人員關注機器學習。

機器學習技術的興起不僅是因為硬體成本越來越便宜以及效能越來越強大,促使機器學習在單機或大規模叢集上輕鬆部署的免費軟體激增也是重要因素。機器學習庫的多樣性意味著無論你喜歡什麼語言或環境,都有可能是獲得你喜歡的。

1. Scikit-learn



Python由於其易用性以及豐富的函式庫,已經成為數學、自然科學和統計學的首選程式語言。Scikit-learn通過在現有Python包上構建——NumPy SciPy和matplotlib——服務於數學和自然科學。生成的庫要麼可以使用互動式“工作臺”應用程式,要麼被嵌入到其他軟體和重用。工具箱可以在BSD許可下獲取,所以它是完全開放和可重用的。

Project: scikit-learn

GitHub: https://github.com/scikit-learn/scikit-learn

2. Shogun

 



在最古老、最值得尊敬的機器學習庫中,Shogun建立於1999年,用C++編寫,但並不限於在C++工作。由於SWIG庫,Shogun可以輕鬆在Java、Python、C#、Ruby、R、Lua、Octave、Matlab語言和環境下使用。

雖然德高望重,Shogun也有其他的競爭者。另一個基於C++的機器學習庫Mlpack在2011年出現,它宣稱比其他競爭者速度更快並且更容易使用(一個更完整的API集)。

Project: Shogun

GitHub: https://github.com/shogun-toolbox/shogun

3. Accord Framework/AForge.net

 



Accord,一個.Net的機器學習和訊號處理框架,是早前類似一個專案AForge.net的擴充套件。順便說一下,“訊號處理”這裡是指一系列對影像和音訊的機器學習演算法,如圖片無縫縫合或執行人臉檢測。包含一組視覺處理演算法;它作用於影像流(如視訊),並且可用於實現移動物件的跟蹤等功能。Accord還提供一個從神經網路到決策樹系統的機器學習常見庫。

Project: Accord Framework/AForge.net

GitHub: https://github.com/accord-net/framework/

4. Mahout

 



Mahout框架一直與Hadoop相關聯,但旗下很多演算法還可以脫離Hadoop執行。他們對那些可能最終遷移到Hadoop上的應用程式或從Hadoop上剝離成為獨立應用程式的專案非常有用。

Mahout缺點之一:目前幾乎沒有演算法支援高效能的Spark框架,反而使用日益過時的MapReduce框架。該專案目前不接受基於MapReduce的演算法,那些想要獲得更高效能的開發者轉而用MLlib 替代。

Project: Mahout

5. MLlib

 



Apache自己的Spark和Hadoop機器學習庫,旨在為大規模和高速度而設計的MLlib自稱擁有所有常見的演算法和有用資料型別。與任何Hadoop專案一樣,Java是MLlib上的基本語言,但是Python使用者可以用MLlib NumPy庫連線(也用於scikit-learn),並且Scala使用者可以針對MLlib編寫程式碼。如果不能設定一個Hadoop叢集,MLlib可以在沒有Hadoop的情況下部署在Spark上——以及在EC2或Mesos上。

Project:MLlib 

6. H2O

 



0xdata H2O的演算法是面向業務流程——欺詐或趨勢預測。Hadoop專家可以使用Java與H2O相互作用,但框架還提供了對Python、R以及Scala的捆綁。

Project: H20

GitHub: https://github.com/0xdata/h2o

7. Cloudera Oryx

 



另一個為Hadoop設計的機器學習專案Oryx由 Cloudera Hadoop distribution創造者提供。Oryx是為了允許機器學習模型部署在實時流資料上而設計的,如實時垃圾郵件過濾器或推薦引擎。
該專案的全新版本暫時定名為Oryx 2,目前正在準備階段。它使用Apache專案如Spark 和 Kafka實現更高效能,其元件構建走鬆散耦合路線以便能經得住時間考驗。

Project:Cloudera Oryx

GitHub: https://github.com/cloudera/oryx

8. GoLearn

 



谷歌的Go語言已經開始被廣泛使用,隨著庫越來越多,據其開發者Stephen Witworth介紹,GoLearn被構建為Go語言的一體化的機器學習庫,目標是“簡單可定製”。簡單主要是由於資料在庫內被載入和處理,因為它是仿照SciPy 和R;可定製性在於庫的開放原始碼特性以及一些資料結構可以很容易地在一個應用程式中擴充套件。Witworth也為Vowpal Wabbit庫建立了一個包裝器,其中一個庫存放在Shogun工具箱中。

Project:GoLearn

GitHub: https://github.com/sjwhitworth/golearn

9. Weka

 



Weka是紐西蘭Waikato大學開發的,收集一組專門為資料探勘設計的Java機器學習演算法。這組GNU得到 GPLv3許可的集有一個包系統擴充套件其功能,有官方和非官方包兩種。Weka甚至還有專門一本書解釋其軟體和實戰技術,所以那些想要在概念和軟體上取得優勢的開發者可以關注下。

雖然Weka並不是專門針對Hadoop使用者,但是Weka的最新版本的一組封裝器可以用於Hadoop。請注意,它還不能支援Spark,只有MapReduc。Clojure使用者還可以通過 Clj-ml 庫利用Weka。

Project: Weka

10. CUDA-Convnet

 



現在大多數人都知道GPU在處理某些問題上的速度比CPU快。但應用程式不會自動利用GPU的加速功能;他們必須明確通過程式寫入。CUDA-Convne是一個神經網路應用程式機器學習庫,用C++編寫來開發Nvidia的CUDA GPU處理技術。對於那些使用Python而不是C++使用者,由此產生的神經網路可以儲存為Python pickle物件,因此可以從Python存取。

注意,原始版本的專案不再被開發,但是已經被重組為CUDA-Convnet2,支援多個GPU和Kepler-generation GPU。與之類似的專案Vulpes,已經用F#編寫,並且通常和.Net框架一起使用。

Project: CUDA-Convnet

11. ConvNetJS

 



顧名思義,ConvNetJS 是一個基於 js 的深度學習 library,可以讓你在瀏覽器中訓練深度網路。NPM版本也可用於那些使用Node.js的使用者,並且這個庫也是為合理使用JavaScript的非同步性而設計,例如,一旦他們完成訓練操作可以給出一個回撥函式來執行。裡面還包含大量的演示案例。

Project: ConvNetJS

GitHub: https://github.com/karpathy/convnetjs
評論(1)

相關文章