現在機器學習逐漸成為行業熱門,經過二十幾年的發展,機器學習目前也有了十分廣泛的應用,如:數據挖掘、計算機視覺、自然語言處理、生物特征識別、搜索引擎、醫學診斷、DNA序列測序、語音和手寫識別、戰略游戲和機器人等方面。
云棲社區特意翻譯整理了目前GitHub上最受歡迎的28款開源的機器學習項目,以供開發者參考使用。
1. TensorFlow
TensorFlow 是谷歌發布的第二代機器學習系統。據谷歌宣稱,在部分基準測試中,TensorFlow的處理速度比第一代的DistBelief加快了2倍之多。
具體的講,TensorFlow是一個利用數據流圖(Data Flow Graphs)進行數值計算的開源軟件庫:圖中的節點( Nodes)代表數學運算操作,同時圖中的邊(Edges)表示節點之間相互流通的多維數組,即張量(Tensors)。這種靈活的架構可以讓使用者在多樣化的將計算部署在臺式機、服務器或者移動設備的一個或多個CPU上,而且無需重寫代碼;同時任一基于梯度的機器學習算法均可夠借鑒TensorFlow的自動分化(Auto-differentiation);此外通過靈活的Python接口,要在TensorFlow中表達想法也變得更為簡單。
TensorFlow最初由Google Brain小組(該小組隸屬于Google's Machine Intelligence研究機構)的研究員和工程師開發出來的,開發目的是用于進行機器學習和深度神經網絡的研究。但該系統的通用性足以使其廣泛用于其他計算領域。
目前Google 內部已在大量使用 AI 技術,包括 Google App 的語音識別、Gmail 的自動回復功能、Google Photos 的圖片搜索等都在使用 TensorFlow 。
開發語言:C++
許可協議:Apache License 2.0
GitHub項目地址:https://github.com/tensorflow/tensorflow
2. Scikit-Learn
Scikit-Learn是用于機器學習的Python 模塊,它建立在SciPy之上。該項目由David Cournapeau 于2007年創立,當時項目名為Google Summer of Code,自此之后,眾多志愿者都為此做出了貢獻。
主要特點:
操作簡單、高效的數據挖掘和數據分析
無訪問限制,在任何情況下可重新使用
建立在NumPy、SciPy 和 matplotlib基礎上
Scikit-Learn的基本功能主要被分為六個部分:分類、回歸、聚類、數據降維、模型選擇、數據預處理,具體可以參考官方網站上的文檔。經過測試,Scikit-Learn可在 Python 2.6、Python 2.7 和 Python 3.5上運行。除此之外,它也應該可在Python 3.3和Python 3.4上運行。
注:Scikit-Learn以前被稱為Scikits.Learn。
開發語言:Python
許可協議:3-Clause BSD license
GitHub項目地址:https://github.com/scikit-learn/scikit-learn
3.Caffe
Caffe 是由神經網絡中的表達式、速度、及模塊化產生的深度學習框架。后來它通過伯克利視覺與學習中心((BVLC)和社區參與者的貢獻,得以發展形成了以一個伯克利主導,然后加之Github和Caffe-users郵件所組成的一個比較松散和自由的社區。
Caffe是一個基于C++/CUDA架構框架,開發者能夠利用它自由的組織網絡,目前支持卷積神經網絡和全連接神經網絡(人工神經網絡)。在Linux上,C++可以通過命令行來操作接口,對于MATLAB、Python也有專門的接口,運算上支持CPU和GPU直接無縫切換。
Caffe的特點
易用性:Caffe的模型與相應優化都是以文本形式而非代碼形式給出, Caffe給出了模型的定義、最優化設置以及預訓練的權重,方便快速使用;
速度快:能夠運行最棒的模型與海量的數據;
Caffe可與cuDNN結合使用,可用于測試AlexNet模型,在K40上處理一張圖片只需要1.17ms;
模塊化:便于擴展到新的任務和設置上;
使用者可通過Caffe提供的各層類型來定義自己的模型;
目前Caffe應用實踐主要有數據整理、設計網絡結構、訓練結果、基于現有訓練模型,使用Caffe直接識別。
開發語言:C++
許可協議: BSD 2-Clause license
GitHub項目地址:https://github.com/BVLC/caffe
4. PredictionIO
PredictionIO 是面向開發人員和數據科學家的開源機器學習服務器。它支持事件采集、算法調度、評估,以及經由REST APIs的預測結果查詢。使用者可以通過PredictionIO做一些預測,比如個性化推薦、發現內容等。PredictionIO 提供20個預設算法,開發者可以直接將它們運行于自己的數據上。幾乎任何應用與PredictionIO集成都可以變得更“聰明”。其主要特點如下所示:
基于已有數據可預測用戶行為;
使用者可選擇你自己的機器學習算法;
無需擔心可擴展性,擴展性好。
PredictionIO 基于 REST API(應用程序接口)標準,不過它還包含 Ruby、Python、Scala、Java 等編程語言的 SDK(軟件開發工具包)。其開發語言是Scala語言,數據庫方面使用的是MongoDB數據庫,計算系統采用Hadoop系統架構。
開發語言:Scala
許可協議:Apache License 2.0
GitHub項目地址:https://github.com/PredictionIO/PredictionIO
5. Brain
Brain是 JavaScript 中的 神經網絡庫。以下例子說明使用Brain來近似 XOR 功能:
var net = new brain.NeuralNetwork();net.train([{input: [0, 0], output: [0]},{input: [0, 1], output: [1]},{input: [1, 0], output: [1]},{input: [1, 1], output: [0]}]);var output = net.run([1, 0]);// [0.987]
當 brain 用于節點中,可使用npm安裝:
npm install brain
當 brain 用于瀏覽器,下載最新的 brain.js 文件。訓練計算代價比較昂貴,所以應該離線訓練網絡(或者在 Worker 上),并使用 toFunction()或者toJSON()選項,以便將預訓練網絡插入到網站中。
開發語言:JavaScript
GitHub項目地址:https://github.com/harthur/brain
6. Keras
Keras是極其精簡并高度模塊化的神經網絡庫,在TensorFlow 或 Theano 上都能夠運行,是一個高度模塊化的神經網絡庫,支持GPU和CPU運算。Keras可以說是Python版的Torch7,對于快速構建CNN模型非常方便,同時也包含了一些最新文獻的算法,比如Batch Noramlize,文檔教程也很全,在官網上作者都是直接給例子淺顯易懂。Keras也支持保存訓練好的參數,然后加載已經訓練好的參數,進行繼續訓練。
Keras側重于開發快速實驗,用可能最少延遲實現從理念到結果的轉變,即為做好一項研究的關鍵。
當需要如下要求的深度學習的庫時,就可以考慮使用Keras:
考慮到簡單快速的原型法(通過總體模塊性、精簡性以及可擴展性);
同時支持卷積網絡和遞歸網絡,以及兩者之間的組合;
支持任意連接方案(包括多輸入多輸出訓練);
可在CPU 和 GPU 上無縫運行。
Keras目前支持 Python 2.7-3.5。
開發語言:Python
GitHub項目地址:https://github.com/fchollet/keras
7. CNTK
CNTK(Computational Network Toolkit )是一個統一的深度學習工具包,該工具包通過一個有向圖將神經網絡描述為一系列計算步驟。在有向圖中,葉節點表示輸入值或網絡參數,其他節點表示該節點輸入之上的矩陣運算。
CNTK 使得實現和組合如前饋型神經網絡DNN、卷積神經網絡(CNN)和循環神經網絡(RNNs/LSTMs)等流行模式變得非常容易。同時它實現了跨多GPU 和服務器自動分化和并行化的隨機梯度下降(SGD,誤差反向傳播)學習。
下圖將CNTK的處理速度(每秒處理的幀數)和其他四個知名的工具包做了比較了。配置采用的是四層全連接的神經網絡(參見基準測試腳本)和一個大小是8192 的高效mini batch。在相同的硬件和相應的最新公共軟件版本(2015.12.3前的版本)的基礎上得到如下結果:
CNTK自2015年四月就已開源。
開發語言:C++
GitHub項目地址:https://github.com/Microsoft/CNTK
8. Convnetjs
ConvNetJS是利用Javascript實現的神經網絡,同時還具有非常不錯的基于瀏覽器的Demo。它最重要的用途是幫助深度學習初學者更快、更直觀的理解算法。
它目前支持:
常見的神經網絡模塊(全連接層,非線性);
分類(SVM/ SOFTMAX)和回歸(L2)的成本函數;
指定和訓練圖像處理的卷積網絡;
基于Deep Q Learning的實驗強化學習模型。
一些在線示例:
Convolutional Neural Network on MNIST digits
Convolutional Neural Network on CIFAR-10
Toy 2D data
Toy 1D regression
Training an Autoencoder on MNIST digits
Deep Q Learning Reinforcement Learning demo+Image Regression ("Painting")+Comparison of SGD/Adagrad/Adadelta on MNIST開發語言:Javascript 許可協議:MIT License GitHub項目地址:https://github.com/karpathy/convnetjs
9. Pattern
Pattern是Python的一個Web挖掘模塊。擁有以下工具:
數據挖掘:網絡服務(Google、Twitter、Wikipedia)、網絡爬蟲、HTML DOM解析;
自然語言處理:詞性標注工具(Part-Of-Speech Tagger)、N元搜索(n-gram search)、情感分析(sentiment analysis)、WordNet;
機器學習:向量空間模型、聚類、分類(KNN、SVM、 Perceptron);
網絡分析:圖形中心性和可視化。
其文檔完善,目前擁有50多個案例和350多個單元測試。 Pattern目前只支持Python 2.5+(尚不支持Python 3),該模塊除了在Pattern.vector模塊中使用LSA外沒有其他任何外部要求,因此只需安裝 NumPy (僅在Mac OS X上默認安裝)。
開發語言:Python
許可協議:BSD license
GitHub項目地址:https://github.com/clips/pattern
10. NuPIC
NuPIC是一個實現了HTM學習算法的機器智能平臺。HTM是一個關于新(大腦)皮質(Neocortex)的詳細人工智能算法。HTM的核心是基于時間的連續學習算法,該算法可以存儲和調用時間和空間兩種模式。NuPIC可以適用于解決各類問題,尤其是異常檢測和流數據源預測方面。
NuPIC Binaries文件目前可用于:
Linux x86 64bit
OS X 10.9
OS X 10.10
Windows 64bit
NuPIC 有自己的獨特之處。許多機器學習算法無法適應新模式,而NuPIC的運作接近于人腦,當模式變化的時候,它會忘掉舊模式,記憶新模式。
開發語言:Python
GitHub項目地址:https://github.com/numenta/nupic
11. Theano
Theano是一個Python庫,它允許使用者有效地定義、優化和評估涉及多維數組的數學表達式,同時支持GPUs和高效符號分化操作。Theano具有以下特點:
與NumPy緊密相關--在Theano的編譯功能中使用了Numpy.ndarray ;
透明地使用GPU--執行數據密集型計算比CPU快了140多倍(針對Float32);
高效符號分化--Theano將函數的導數分為一個或多個不同的輸入;
速度和穩定性的優化--即使輸入的x非常小也可以得到log(1+x)正確結果;
動態生成 C代碼--表達式計算更快;
廣泛的單元測試和自我驗證--多種錯誤類型的檢測和判定。
自2007年起,Theano一直致力于大型密集型科學計算研究,但它目前也很被廣泛應用在課堂之上( 如Montreal大學的深度學習/機器學習課程)。
開發語言:Python
GitHub項目地址:https://github.com/Theano/Theano
12. MXNet
MXNet是一個兼具效率和靈活性的深度學習框架。它允許使用者將符號編程和命令式編程相結合,以追求效率和生產力的最大化。其核心是動態依賴調度程序,該程序可以動態自動進行并行化符號和命令的操作。其中部署的圖形優化層使得符號操作更快和內存利用率更高。該庫輕量且便攜帶,并且可擴展到多個GPU和多臺主機上。
主要特點:
其設計說明提供了有用的見解,可以被重新應用到其他DL項目中;
任意計算圖的靈活配置;
整合了各種編程方法的優勢最大限度地提高靈活性和效率;
輕量、高效的內存以及支持便攜式的智能設備;
多GPU擴展和分布式的自動并行化設置;
支持Python、R、C++和 Julia;
對“云計算”友好,直接兼容S3、HDFS和Azure。
MXNet不僅僅是一個深度學習項目,它更是一個建立深度學習系統的藍圖、指導方針以及黑客們對深度學習系統獨特見解的結合體。
開發語言:Jupyter Notebook
開源許可:Apache-2.0license
GitHub項目地址:https://github.com/dmlc/mxnet
13. Vowpal Wabbit
Vowpal Wabbit是一個機器學習系統,該系統推動了如在線、散列、Allreduce、Learning2search、等方面機器學習前沿技術的發展。 其訓練速度很快,在20億條訓練樣本,每個訓練樣本大概100個非零特征的情況下:如果特征的總位數為一萬時,訓練時間為20分鐘;特征總位數為1000萬時,訓練時間為2個小時。Vowpal Wabbit支持分類、 回歸、矩陣分解和LDA。
當在Hadoop上運行Vowpal Wabbit時,有以下優化機制:
懶惰初始化:在進行All Reduce之前,可將全部數據加載到內存中并進行緩存。即使某一節點出現了錯誤,也可以通過在另外一個節點上使用錯誤節點的數據(通過緩存來獲取)來繼續訓練。
Speculative Execution:在大規模集群當中,一兩個很慢的Mapper會影響整個Job的性能。Speculative Execution的思想是當大部分節點的任務完成時,Hadoop可以將剩余節點上的任務拷貝到其他節點完成。
開發語言:C++
GitHub項目地址:https://github.com/JohnLangford/vowpal_wabbit
14. Ruby Warrior
通過設計了一個游戲使得Ruby語言和人工智能學習更加有樂趣和互動起來。
使用者扮演了一個勇士通過爬上一座高塔,到達頂層獲取珍貴的紅寶石(Ruby)。在每一層,需要寫一個Ruby腳本指導戰士打敗敵人、營救俘虜、到達樓梯。使用者對每一層都有一些認識,但是你永遠都不知道每層具體會發生什么情況。你必須給戰士足夠的人工智能,以便讓其自行尋找應對的方式。
勇士的動作相關API:
Warrior.walk: 用來控制勇士的移動,默認方向是往前;
warrior.feel:使用勇士來感知前方的情況,比如是空格,還是有怪物;
Warrior.attack:讓勇士對怪物進行攻擊;
Warrior.health:獲取勇士當前的生命值;
Warrior.rest:讓勇士休息一回合,恢復最大生命值的10%。
勇士的感知API:
Space.empty:感知前方是否是空格;
Space.stairs:感知前方是否是樓梯;
Space.enemy: 感知前方是否有怪物;
Space.captive:感知前方是否有俘虜;
Space.wall:感知前方是否是墻壁。
開發語言:Ruby
GitHub項目地址:https://github.com/ryanb/ruby-warrior
以上為GitHub上最流行的開源機器學習項目TOP14,“28款GitHub最流行的開源機器學習項目(二)”。
評論