參考連接:https://linux.cn/article-7252-1.html?prhtml
如今機器學習逐漸成爲行業熱門,通過二十幾年的發展,機器學習目前也有了十分普遍的應用,如:數據挖掘、計算機視覺、天然語言處理、生物特徵識別、搜索引擎、醫學診斷、DNA序列測序、語音和手寫識別、戰略遊戲和機器人等方面。linux
雲棲社區特地翻譯整理了目前GitHub上最受歡迎的28款開源的機器學習項目,以供開發者參考使用。git
_1github
TensorFlow 是谷歌發佈的第二代機器學習系統。據谷歌宣稱,在部分基準測試中,TensorFlow的處理速度比第一代的DistBelief加快了2倍之多。算法
具體的講,TensorFlow是一個利用數據流圖(Data Flow Graphs)進行數值計算的開源軟件庫:圖中的節點( Nodes)表明數學運算操做,同時圖中的邊(Edges)表示節點之間相互流通的多維數組,即張量(Tensors)。這種靈活的架構可讓使用者在多樣化的將計算部署在臺式機、服務器或者移動設備的一個或多個CPU上,並且無需重寫代碼;同時任一基於梯度的機器學習算法都可夠借鑑TensorFlow的自動分化(Auto-differentiation);此外經過靈活的Python接口,要在TensorFlow中表達想法也變得更爲簡單。數據庫
TensorFlow最初由Google Brain小組(該小組隸屬於Google's Machine Intelligence研究機構)的研究員和工程師開發出來的,開發目的是用於進行機器學習和深度神經網絡的研究。但該系統的通用性足以使其普遍用於其餘計算領域。apache
目前Google 內部已在大量使用 AI 技術,包括 Google App 的語音識別、Gmail 的自動回覆功能、Google Photos 的圖片搜索等都在使用 TensorFlow 。npm
Scikit-Learn是用於機器學習的Python 模塊,它創建在SciPy之上。該項目由David Cournapeau 於2007年創立,當時項目名爲Google Summer of Code,自此以後,衆多志願者都爲此作出了貢獻。編程
主要特色:後端
Scikit-Learn的基本功能主要被分爲六個部分:分類、迴歸、聚類、數據降維、模型選擇、數據預處理,具體能夠參考官方網站上的文檔。通過測試,Scikit-Learn可在 Python 2.六、Python 2.7 和 Python 3.5上運行。除此以外,它也應該可在Python 3.3和Python 3.4上運行。
注:Scikit-Learn之前被稱爲Scikits.Learn。
Caffe 是由神經網絡中的表達式、速度、及模塊化產生的深度學習框架。後來它經過伯克利視覺與學習中心(BVLC)和社區參與者的貢獻,得以發展造成了以一個伯克利主導,而後加之Github和Caffe-users郵件所組成的一個比較鬆散和自由的社區。
Caffe是一個基於C++/CUDA架構框架,開發者可以利用它自由的組織網絡,目前支持卷積神經網絡和全鏈接神經網絡(人工神經網絡)。在Linux上,C++能夠經過命令行來操做接口,對於MATLAB、Python也有專門的接口,運算上支持CPU和GPU直接無縫切換。
Caffe的特色:
目前Caffe應用實踐主要有數據整理、設計網絡結構、訓練結果、基於現有訓練模型,使用Caffe直接識別。
PredictionIO 是面向開發人員和數據科學家的開源機器學習服務器。它支持事件採集、算法調度、評估,以及經由REST APIs的預測結果查詢。使用者能夠經過PredictionIO作一些預測,好比個性化推薦、發現內容等。PredictionIO 提供20個預設算法,開發者能夠直接將它們運行於本身的數據上。幾乎任何應用與PredictionIO集成均可以變得更「聰明」。其主要特色以下所示:
PredictionIO 基於 REST API(應用程序接口)標準,不過它還包含 Ruby、Python、Scala、Java 等編程語言的 SDK(軟件開發工具包)。其開發語言是Scala語言,數據庫方面使用的是MongoDB數據庫,計算系統採用Hadoop系統架構。
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()選項,以便將預訓練網絡插入到網站中。
Keras是極其精簡併高度模塊化的神經網絡庫,在TensorFlow 或 Theano 上都可以運行,是一個高度模塊化的神經網絡庫,支持GPU和CPU運算。Keras能夠說是Python版的Torch7,對於快速構建CNN模型很是方便,同時也包含了一些最新文獻的算法,好比Batch Noramlize,文檔教程也很全,在官網上做者都是直接給例子淺顯易懂。Keras也支持保存訓練好的參數,而後加載已經訓練好的參數,進行繼續訓練。
Keras側重於開發快速實驗,用可能最少延遲實現從理念到結果的轉變,即爲作好一項研究的關鍵。
當須要以下要求的深度學習的庫時,就能夠考慮使用Keras:
Keras目前支持 Python 2.7-3.5。
CNTK(Computational Network Toolkit )是一個統一的深度學習工具包,該工具包經過一個有向圖將神經網絡描述爲一系列計算步驟。在有向圖中,葉節點表示輸入值或網絡參數,其餘節點表示該節點輸入之上的矩陣運算。
CNTK 使得實現和組合如前饋型神經網絡DNN、卷積神經網絡(CNN)和循環神經網絡(RNNs/LSTMs)等流行模式變得很是容易。同時它實現了跨多GPU 和服務器自動分化和並行化的隨機梯度降低(SGD,偏差反向傳播)學習。
下圖將CNTK的處理速度(每秒處理的幀數)和其餘四個知名的工具包作了比較了。配置採用的是四層全鏈接的神經網絡(參見基準測試腳本)和一個大小是8192 的高效mini batch。在相同的硬件和相應的最新公共軟件版本(2015.12.3前的版本)的基礎上獲得以下結果:
_2
CNTK自2015年四月就已開源。
ConvNetJS是利用Javascript實現的神經網絡,同時還具備很是不錯的基於瀏覽器的Demo。它最重要的用途是幫助深度學習初學者更快、更直觀的理解算法。
它目前支持:
一些在線示例:
_3
Pattern是Python的一個Web挖掘模塊。擁有如下工具:
其文檔完善,目前擁有50多個案例和350多個單元測試。 Pattern目前只支持Python 2.5+(尚不支持Python 3),該模塊除了在Pattern.vector模塊中使用LSA外沒有其餘任何外部要求,所以只需安裝 NumPy (僅在Mac OS X上默認安裝)。
_4
NuPIC是一個實現了HTM學習算法的機器智能平臺。HTM是一個關於新(大腦)皮質(Neocortex)的詳細人工智能算法。HTM的核心是基於時間的連續學習算法,該算法能夠存儲和調用時間和空間兩種模式。NuPIC能夠適用於解決各種問題,尤爲是異常檢測和流數據源預測方面。
NuPIC Binaries文件目前可用於:
NuPIC 有本身的獨特之處。許多機器學習算法沒法適應新模式,而NuPIC的運做接近於人腦,當模式變化的時候,它會忘掉舊模式,記憶新模式。
Theano是一個Python庫,它容許使用者有效地定義、優化和評估涉及多維數組的數學表達式,同時支持GPUs和高效符號分化操做。Theano具備如下特色:
自2007年起,Theano一直致力於大型密集型科學計算研究,但它目前也很被普遍應用在課堂之上( 如Montreal大學的深度學習/機器學習課程)。
_5
MXNet是一個兼具效率和靈活性的深度學習框架。它容許使用者將符號編程和命令式編程相結合,以追求效率和生產力的最大化。其核心是動態依賴調度程序,該程序能夠動態自動進行並行化符號和命令的操做。其中部署的圖形優化層使得符號操做更快和內存利用率更高。該庫輕量且便攜帶,而且可擴展到多個GPU和多臺主機上。
主要特色:
MXNet不只僅是一個深度學習項目,它更是一個創建深度學習系統的藍圖、指導方針以及黑客們對深度學習系統獨特看法的結合體。
Vowpal Wabbit是一個機器學習系統,該系統推進了如在線、散列、Allreduce、Learning2search、等方面機器學習前沿技術的發展。 其訓練速度很快,在20億條訓練樣本,每一個訓練樣本大概100個非零特徵的狀況下:若是特徵的總位數爲一萬時,訓練時間爲20分鐘;特徵總位數爲1000萬時,訓練時間爲2個小時。Vowpal Wabbit支持分類、 迴歸、矩陣分解和LDA。
當在Hadoop上運行Vowpal Wabbit時,有如下優化機制:
經過設計了一個遊戲使得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:感知前方是不是牆壁。
XGBoot是設計爲高效、靈活、可移植的優化分佈式梯度 Boosting庫。它實現了 Gradient Boosting 框架下的機器學習算法。
XGBoost經過提供並行樹Boosting(也被稱爲GBDT、GBM),以一種快速且準確的方式解決了許多數據科學問題。相同的代碼能夠運行在大型分佈式環境如Hadoop、SGE、MP上。它相似於梯度上升框架,可是更加高效。它兼具線性模型求解器和樹學習算法。
XGBoot至少比現有的梯度上升實現有至少10倍的提高,同時還提供了多種目標函數,包括迴歸、分類和排序。因爲它在預測性能上的強大,XGBoot成爲不少比賽的理想選擇,其還具備作交叉驗證和發現關鍵變量的額外功能。
值得注意的是:XGBoost僅適用於數值型向量,所以在使用時須要將全部其餘形式的數據轉換爲數值型向量;在優化模型時,這個算法還有很是多的參數須要調整。
GoLearn 是Go 語言中「功能齊全」的機器學習庫,簡單性及自定義性是其開發目標。
在安裝 GoLearn 時,數據做爲實例被加載,而後能夠在其上操做矩陣,並將操做值傳遞給估計值。GoLearn 實現了Fit/Predict的Scikit-Learn界面,所以用戶可輕鬆地經過反覆試驗置換出估計值。此外,GoLearn還包括用於數據的輔助功能,例如交叉驗證、訓練以及爆裂測試。
ML_for_Hackers 是針對黑客機器學習的代碼庫,該庫包含了全部針對黑客的機器學習的代碼示例(2012)。該代碼可能和文中出現的並不徹底相同,由於自出版以來,可能又添加了附加的註釋和修改部分。
全部代碼均爲R語言,依靠衆多的R程序包,涉及主題包括分類(Classification)、排行(Ranking)、以及迴歸(Regression)的全部常見的任務和主成分分析(PCA)和多維尺度(Multi-dimenstional Scaling)等統計方法。
H2O使得Hadoop可以作數學運算!它能夠經過大數據衡量統計數據、機器學習和數學。H2O是可擴展的,用戶能夠在覈心區域使用簡單的數學模型構建模塊。H2O保留着與R、Excel 和JSON等相相似的熟悉的界面,使得大數據愛好者及專家們可經過使用一系列由簡單到高級的算法來對數據集進行探索、變換、建模及評分。採集數據很簡單,但判決難度卻很大,而H2O卻經過更快捷、更優化的預測模型,可以更加簡單迅速地從數據中得到深入看法。
0xdata H2O的算法是面向業務流程——欺詐或趨勢預測。Hadoop專家可使用Java與H2O相互做用,但框架還提供了對Python、R以及Scala的捆綁。
neon 是 Nervana 基於 Python 語言的深度學習框架,在諸多常見的深層神經網絡中都可以得到較高的性能,好比AlexNet、VGG 或者GoogLeNet。在設計 neon 時,開發者充分考慮了以下功能:
在 Nervana中,neon被用來解決客戶在多個域間存在的各類問題。
開源項目Oryx提供了簡單且實時的大規模機器學習、預測分析的基礎設施。它可實現一些經常使用於商業應用的算法類:協做式過濾/推薦、分類/迴歸、集羣等。此外,Oryx 可利用 Apache Hadoop 在大規模數據流中創建模型,還能夠經過HTTP REST API 爲這些模型提供實時查詢,同時隨着新的數據不斷流入,能夠近似地自動更新模型。這種包括了計算層和服務層的雙重設計,可以分別實現一個Lambda 架構。模型在PMML格式交換。
_6
Oryx本質上只作兩件事:建模和爲模型服務,這就是計算層和服務層兩個獨立的部分各自的職責。計算層是離線、批量的過程,可從輸入數據中創建機器學習模型,它的經營收益在於「代」,便可利用某一點處輸入值的快照建模,結果就是隨着連續輸入的累加,隨時間生成一系列輸出;服務層也是一個基於Java長期運行的服務器進程,它公開了REST API。使用者可從瀏覽器中訪問,也可利用任何可以發送HTTP請求的語言或工具進行訪問。
Oryx的定位不是機器學習算法的程序庫,Owen關注的重點有四個:迴歸、分類、集羣和協做式過濾(也就是推薦)。其中推薦系統很是熱門,Owen正在與幾個Cloudera的客戶合做,幫他們使用Oryx部署推薦系統。
Shogun是一個機器學習工具箱,由Soeren Sonnenburg 和Gunnar Raetsch(建立,其重點是大尺度上的內核學習方法,特別是支持向量機(SVM,Support Vector Machines)的學習工具箱。它提供了一個通用的鏈接到幾個不一樣的SVM實現方式中的SVM對象接口,目前發展最早進的LIBSVM和SVMlight 也位於其中,每一個SVM均可以與各類內核相結合。工具箱不只爲經常使用的內核程序(如線性、多項式、高斯和S型核函數)提供了高效的實現途徑,還自帶了一些近期的字符串內核函數,例如局部性的改進、Fischer、TOP、Spectrum、加權度內核與移位,後來有效的LINADD優化內核函數也已經實現。
此外,Shogun還提供了使用自定義預計算內核工做的自由,其中一個重要特徵就是能夠經過多個子內核的加權線性組合來構造的組合核,每一個子內核無需工做在同一個域中。經過使用多內核學習可知最優子內核的加權。
目前Shogun能夠解決SVM 2類的分類和迴歸問題。此外Shogun也添加了了像線性判別分析(LDA)、線性規劃(LPM)、(內核)感知等大量線性方法和一些用於訓練隱馬爾可夫模型的算法。
HLearn是由Haskell語言編寫的高性能機器學習庫,目前它對任意維度空間有着最快最近鄰的實現算法。
HLearn一樣也是一個研究型項目。該項目的研究目標是爲機器學習發掘「最佳可能」的接口。這就涉及到了兩個相互衝突的要求:該庫應該像由C/C++/Fortran/Assembly開發的底層庫那樣運行快速;同時也應該像由Python/R/Matlab開發的高級庫那樣靈活多變。Julia在這個方向上取得了驚人的進步,可是 HLearn「野心」更大。更值得注意的是,HLearn的目標是比低級語言速度更快,比高級語言更加靈活。
爲了實現這一目標,HLearn採用了與標準學習庫徹底不一樣的接口。在HLearn中H表明着三個不一樣的概念,這三個概念也是HLearn設計的基本要求:
H表明Haskell。機器學習是從數據中預測函數,因此功能性編程語言適應機器學習是徹底說的通的。但功能性編程語言並沒普遍應用於機器學習,這是由於它們固來缺少支持學習算法的快速數值計算能力。HLearn經過採用Haskell中的SubHask庫得到了快速數值計算能力;
H同時表明着Homomorphisms。Homomorphisms是抽象代數的基本概念,HLearn將該代數結構用於學習系統中;
H還表明着History monad。在開發新的學習算法過程當中,最爲困難的任務之一就是調試優化過程。在此以前,是沒有辦法減輕調試過程的工做量的,但History monad正在試圖解決該問題。它可讓你在整個線程優化代碼的過程當中無需修改原代碼。此外,使用該技術時沒有增長其餘的運行開銷。
MLPNeuralNet是一個針對iOS和Mac OS系統的快速多層感知神經網絡庫,可經過已訓練的神經網絡預測新實例。它利用了向量運算和硬盤加速功能(若是可用),其創建在蘋果公司的加速框架之上。
_7
若你已經用Matlab(Python或R)設計了一個預測模型,並但願在iOS應用程序加以應用。在這種狀況下,正好須要MLP NeuralNet,而MLP NeuralNet只能加載和運行前向傳播方式的模型。MLP NeuralNet 有以下幾個特色:
Mahout 是Apache Software Foundation(ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地建立智能應用程序。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,經過使用 Apache Hadoop 庫,Mahout 能夠有效地擴展到雲中。Apache Mahout項目的目標是創建一個可以快速建立可擴展、高性能機器學習應用的環境。
雖然在開源領域中相對較爲年輕,但 Mahout 已經提供了大量功能,特別是在集羣和 CF 方面。Mahout 的主要特性包括:
使用 Mahout 還可實現內容分類。Mahout 目前支持兩種根據貝氏統計來實現內容分類的方法:第一種方法是使用簡單的支持 Map-Reduce 的 Naive Bayes 分類器;第二種方法是 Complementary Naive Bayes,它會嘗試糾正Naive Bayes方法中的一些問題,同時仍然可以維持簡單性和速度。
Seldon是一個開放式的預測平臺,提供內容建議和通常的功能性預測。它在Kubernetes集羣內運行,所以能夠調配到Kubernetes範圍內的任一地址:內部部署或雲部署(例如,AWS、谷歌雲平臺、Azure)。另外,它還能夠衡量大型企業安裝的需求。
Datumbox機器學習框架是用Java編寫的一個開源框架,該框架的涵蓋大量的機器學習算法和統計方法,並可以處理大尺寸的數據集。
Datumbox API提供了海量的分類器和天然語言處理服務,可以被應用在不少領域的應用,包括了情感分析、話題分類、語言檢測、主觀分析、垃圾郵件檢測、閱讀評估、關鍵詞和文本提取等等。目前,Datumbox全部的機器學習服務都可以經過API獲取,該框架可以讓用戶迅速地開發本身的智能應用。目前,基於GPL3.0的Datumbox機器學習框架已經開源而且能夠從GitHub上進行下載。
Datumbox的機器學習平臺很大程度上已經可以取代普通的智能應用。它具備以下幾個顯著的優勢:
Datumbox主要能夠應用在四個方面:一個是社交媒體的監視,評估用戶觀點可以經過機器學習解決,Datumbox可以幫助用戶構建本身的社交媒體監視工具;第二是搜索引擎優化,其中很是有效的方法就是文檔中重要術語的定位和優化;第三點是質量評估,在在線通信中,評估用戶產生內容的質量對於去除垃圾郵件是很是重要的,Datumbox可以自動的評分而且審覈這些內容;最後是文本分析,天然語言處理和文本分析工具推進了網上大量應用的產生,平臺API可以很輕鬆地幫助用戶進行這些分析。
Jubatus庫是一個運行在分佈式環境中的在線機器學習框架,即面向大數據數據流的開源框架。它和Storm有些相似,但可以提供更多的功能,主要功能以下:
Jubatus認爲將來的數據分析平臺應該同時向三個方向展開:處理更大的數據,深層次的分析和實時處理。因而Jubatus將在線機器學習,分佈式計算和隨機算法等的優點結合在一塊兒用於機器學習,並支持分類、迴歸、推薦等基本元素。根據其設計目的,Jubatus有以下的特色:
若是有基於流數據的機器學習方面的需求,Jubatus值得關注。
Decider 是另外一個 Ruby 機器學習庫,兼具靈活性和可擴展性。Decider內置了對純文本和URI、填充詞彙、中止詞刪除、字格等的支持,以上這些均可以很容易地在選項中組合。Decider 可支持Ruby中任何可用的存儲機制。若是你喜歡,能夠保存到數據庫中,實現分佈式分類。
Decider有幾個基準,也兼做集成測試。這些都是按期運行並用於查明CPU和RAM的瓶頸。Decider能夠進行大量數學運算,計算至關密集,因此對速度的要求比較高。這是常用Ruby1.9和JRuby測試其計算速度。此外,用戶的數據集應該徹底在內存中,不然將會遇到麻煩。