Python中最好用的機器學習庫

Python部落(www.freelycode.com)組織翻譯, 禁止轉載

前言

毫無疑問,在過去幾年,神經網路和機器學習已經成為科技領域裡討論最熱的話題之一。很容易看出他們正在解決所有用戶感興趣的東西,例如語音識別、圖像識別,甚至是音樂合成。基於此,在這篇文章裡,我列了一個關於機器學習最好用的python庫的表,並把它們列在下面.

在我看來,python是機器學習技術最好用的語言和工具,原因如下:
簡單:由於它簡單的語法和龐大的社區,現在python語言正成為新工程師首先選擇的語言。
強大:有些東西簡單並不意味著它不能勝任。Python是在數據科學家和網站開發者中最流行的語言。它的社區已經創造了你想做任何事情的庫,包括機器學習。
大量的機器學習庫:有許多專門用Python語言寫的機器學習庫。基於你的的需求、技術或定制需求,你可以在幾百個庫裡面選擇。

以上最後一點是最重要的。運行機器學習的算法是非常複雜的,它包括大量的數學計算。所以如果你自己寫它們(或者做到他們)的話,那將會是一個非常困難的任務。幸運的是,有許多聰明和專注的人已經為我們做了這個困難工作,故我們可以專注於我們手頭的任務。

這並不是一個非常詳盡的表。因為有許多代碼,所以在這兒我僅僅貼一些非常相關的或知名的庫。現在,上清單。

最受歡迎的庫

對於比較流行的庫我會對其有一個比較簡要的描述和它們擅長什麼,對於比較值得參考的項目,在下一節會有一個更加完整的表。

Tensorflow

在列單裡這是一個最新的神經網路庫,幾天前,Tensorflow剛剛被發布,它是一個高級神經網路庫,能夠幫助你構建網路架構,同時避免底層的細節。重點是可以讓你把你的計算表示成數據流圖,它更適合解決複雜的問題。

它主要是用C++寫的,被python綁定,所以你不必擔心這會犧牲性能。我最喜歡的特徵之一就是它擁有靈活的架構,在所有使用相同API的桌面、服務器或者移動設備上,它允許你可以將它部署到一個或多個CPU或GPU上。假如有得話,這樣的庫也不會很多可以聲稱擁有這種能力。這是為「Google大腦」這個項目開發的,現在正在被全公司數百名工程師使用,它有能力創建有趣的解決方案,這一點是毫無疑問的。

和其它庫一樣,你可能不得不花費一些時間去學習一下它的API,但是你花費的這些時間應該是很值的。我僅僅花費了幾分鐘去了解它核心的功能,但是為了做到我的網路設計我卻會花費更多的時間,而我沒卻完全搞定API。

適合:神經網路

scikit-learn

在所有的機器學習語言庫中,Scikit-learn庫絕對是最值得推薦的,或者之一。對於數據挖掘和數據分析,他有許多優點,這使它成為研究和開發人員的首選。

它建立在最流行的Numpy、Scipy和matplotlib庫之上,所以對於已經使用這些庫的人員來說,會對它有一種似曾相識的感覺。盡管,和下面列出的許多其它的庫相比,這個庫顯得有點底層,但它往往扮演其它許多機器學習做到的基礎。

適合:幾乎一切

Theano

Theano是一個這樣的機器學習庫,它允許你去定義、優化和評估涉及多維數組的數學表達式。對於一些開發人員來說,使用其他庫可能會有一點挫敗感。與scikit-learn一樣,Theano和Numpy也有緊密的聯繫。GPU的透明使用和設置使掌握Theano更快,這一點對於那些剛開始學習的人相當的重要。據一些使用它的人員來說,更願把他用於研究使用,而不是產品使用。
最大的特點就是它擁有大量的文檔和教程。由於網上相關庫非常多,你會輕而易舉的找到相關資源,它會告訴你如何讓你的模型啟動並運行。

適合:神經網路和深度學習

Pylearn2

Pylearn2大部分工能實際上是建立在在Theano之上,所以它有一個非常堅實的基礎。

根據Pylearn2網站:
Pylearn2與scikit-learn的不同之處在於,Pylearn2旨在提供極大的靈活性,使研究者可以做幾乎任何事情,而scikit-learn旨在作為一個可以產生良好結果的「黑匣子」,即使用戶不理解其做到原理。

適合:神經網路

Pyevolve

和神經網路研究領域不同卻更令人興奮的領域之一就是空間遺傳算法。遺傳算法基本上就是一個模擬自然選擇的搜尋啟發式過程。本質上它是測試一些數據的神經網路,並且從一個擬合函數中得到該網路性能的反饋。然後迭代,使網路做一些小的、隨機的改變,然後繼續使用相同的數據測試一遍。最後得出較高擬合程度的網路,然後把它作為新數據的母模型。

Pyevolve提供了一個很好的框架來構建和執行這樣的算法。盡管作者說的v0.6框架也支持遺傳編程,但是在不久的將來,相比於簡單遺傳算法框架,這個框架將更傾向於作為一個進化計算框架。

適合:神經網路和遺傳算法

NuPIC

Nuplc是這樣的一個庫,它和標準的機器學習算法庫不同,它會提供給你一些不同的功能。它以大腦皮層的理論為基礎,稱之為分層時間記憶(HTM)。你可以把HML看作是一種神經網路,但是有些理論不這樣認為。

從根本上講,HTMS是一個分層的、基於時間的記憶系統,它可以訓練各種各樣的數據。它是一個新的計算框架,模擬大腦記憶和計算是如何交織在一起的。如果你想看一個完整的理論,請自行查閱相關資料。

適合:HTMS

Pattern

可以說這是一個更完全的庫,因為它不僅僅提供了一些機器學習算法,而且也提供有幫助你搜集和分析數據的工具。數據挖掘部分將幫助您從像Google、Twitter和維基百這樣的web服務器上收集數據,它也有一個網路爬蟲和HTML DOM解析器。擁有這些工具會是一件很美好的事情,它會使你在同一個程序收集和訓練數據變得容易。

這兒給一個來自使用文檔的一個很好的例子,它使用一堆推特數據去訓練一個分類器,判斷推文是否成功:

這是推特第一次使用twitter.search()搜集數據,通過標籤「成功」和「失敗」,然後使用K-最鄰近算法(KNN)從提取推特形容詞來訓練。在訓練次數足夠的多時,你就得到了一個分類器。這樣也不錯,僅僅有15行代碼。

適合:自然語言處理(NLP)、聚類和分類

Caffe

Cafffe是機器學習在視覺應用上的一個庫。你可以用它創建一個深度神經網路,該神經網路可以識別一個圖像對象,甚至識別一種圖像風格。當你訓練圖像時,強烈推薦你使用它,它會和GPU之間有一個完美的融合。盡管這個庫似乎主要用於學術研究,但是對於培訓模型和生產,它應該也有大量的用處。

適合:神經網路/視覺深度學習

其它值得關注的庫

在這個清單裡面還有許多其它的Python機器學習庫,有些會提供一些和上面庫的一樣的功能,另一些庫功能相對較狹窄,更多的是被當作學習工具來用。

Nilearn
Statsmodels
PyBrain (inactive)
Fuel
Bob
Skdata
MILK
IEPY
Quepy
Hebel
Mlxtend
nolearn
Ramp
Feature Forge

REP
Python-ELM
PythonXY
XCS
PyML
MLPY (inactive)
Orange
Monte
PYMVPA
MDP (inactive)
Shogun
PyMC
Gensim
Neurolab
FFnet (inactive)
LibSVM
Spearmint
Chainer
topik
Crab
CoverTree
Breze
deap
neurolab
Spearmint
yahmm
pydeep
Annoy
neon
sentiment

英文原文: http://stackabuse.com/the-best-machine-learning-libraries-in-python/

譯者: 雲杉

長按, 識別二維碼關注

閱讀原文


關於作者:
專業的python學習公眾號,有資源下載,真人指導,定期推送,各類活動。幫助pythoner快速提升自己的能力。