值得mark的11個開源機器學習項目
英文原文:11 open source tools to make the most of machine learning
垃圾郵件過濾、人臉識別、推薦引擎——當你有一個大數據集并且希望利用它們執行預測分析和模式識別,機器學習是必經之路。這門科學,計算機可以在沒有事先規劃的前提下自主學習、分析和操作數據,現在越來越多的開發人員關注機器學習。
機器學習技術的興起不僅是因為硬件成本越來越便宜以及性能越來越強大,促使機器學習在單機或大規模集群上輕松部署的免費軟件激增也是重要因素。機器學習庫的多樣性意味著無論你喜歡什么語言或環境,都有可能是獲得你喜歡的。
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