引言
毫無疑問,神經網路和機器學習在過去幾年一直是高科技領域最熱門的話題之一。這一點很容易看出,因為它們解決了很多真正有趣的用例,如語音識別、影像識別、甚至是樂曲譜寫。因此,在這篇文章,我決定編制一份囊括一些很好的Python機器學習庫的清單,並將其張貼在下面。
在我看來,Python是學習(和實現)機器學習技術最好的語言之一,其原因主要有以下幾點:
- 語言簡單:如今,Python成為新手程式設計師首選語言的主要原因是它擁有簡單的語法和龐大的社群。
- 功能強大:語法簡單並不意味著它功能薄弱。Python同樣也是資料科學家和Web程式設計師最受歡迎的語言之一。Python社群所建立的庫可以讓你做任何你想做的事,包括機器學習。
- 豐富的ML庫:目前有大量面向Python的機器學習庫。你可以根據你的使用情況、技術和需求從數百個庫中選擇最合適的一個。
上面最後一點可以說是最重要的。驅動機器學習的演算法相當複雜,包括了很多的數學知識,所以自己動手去實現它們(並保證其正常執行)將會是一件很困難的任務。幸運地是,有很多聰明的、有奉獻精神的人為我們做了這個困難的工作,因此我們只需要專注於手邊的應用程式即可。
這並不是一個詳盡無遺的清單。有很多程式碼並未在此列出,在這裡我只會發布一些非常相關或知名的庫。下面,來看看這份清單吧。
最受歡迎的庫
我已經對一些比較流行的庫和它們擅長的方向做了一個簡短的描述,在下一節,我會給出一個更完整的專案列表。
Tensorflow
這是清單中最新的神經網路庫。在前幾天剛剛發行,Tensorflow是高階神經網路庫,可以幫助你設計你的網路架構,避免出現低水平的細節錯誤。重點是允許你將計算表示成資料流圖,它更適合於解決複雜問題。
此庫主要使用C++編寫,包括Python繫結,所以你不必擔心其效能問題。我最喜歡的一個特點是它靈活的體系結構,允許你使用相同的API將其部署到一個或多個CPU或GPU的桌上型電腦、伺服器或者移動裝置。有此功能的庫並不多,如果要說有,Tensorflow就是其一。
它是為谷歌大腦專案開發的,目前已被數百名工程師使用,所以無須懷疑它是否能夠創造有趣的解決方案。
儘管和其它的庫一樣,你可能必須花一些時間來學習它的API,但花掉的時間應該是很值得的。我只花了幾分鐘瞭解了一下它的核心功能,就已經知道Tensorflow值得我花更多的時間讓我來實現我的網路設計,而不僅僅是通過API來使用。
擅長:神經網路
網址:http://tensorflow.org/
Github: https://github.com/tensorflow/tensorflow
scikit-learn
scikit-learn絕對是其中一個,如果不是最流行的,那麼也算得上是所有語言中流行的機器學習庫之一。它擁有大量的資料探勘和資料分析功能,使其成為研究人員和開發者的首選庫。
其內建了流行的NumPy、SciPy,matplotlib庫,因此對許多已經使用這些庫的人來說就有一種熟悉的感覺。儘管與下面列出的其他庫相比,這個庫顯得水平層次略低,並傾向於作為許多其他機器學習實現的基礎。
擅長:非常多
網址:http://scikit-learn.org/
Github: http://github.com/scikit-learn/scikit-learn
Theano
Theano是一個機器學習庫,允許你定義、優化和評估涉及多維陣列的數學表示式,這可能是其它庫開發商的一個挫折點。與scikit-learn一樣,Theano也很好地整合了NumPy庫。GPU的透明使用使得Theano可以快速並且無錯地設定,這對於那些初學者來說非常重要。然而有些人更多的是把它描述成一個研究工具,而不是當作產品來使用,因此要按需使用。
Theano最好的功能之一是擁有優秀的參考文件和大量的教程。事實上,多虧了此庫的流行程度,使你在尋找資源的時候不會遇到太多的麻煩,比如如何得到你的模型以及執行等。
擅長:神經網路和深度學習
網址:http://deeplearning.net/software/theano/
Github:https://github.com/Theano/Theano
Pylearn2
大多數Pylearn2的功能實際上都是建立在Theano之上,所以它有一個非常堅實的基礎。
據Pylearn2網址介紹:
Pylearn2不同於scikit-learn,Pylearn2旨在提供極大的靈活性,使研究者幾乎可以做任何想做的事情,而scikit-learn的目的是作為一個“黑盒”來工作,即使使用者不瞭解實現也能產生很好的結果。
記住,Pylearn2在合適的時候會封裝其它的庫,如scikit-learn,所以在這裡你不會得到100%使用者編寫的程式碼。然而,這確實很好,因為大多數錯誤已經被解決了。像Pylearn2這樣的封裝庫在此列表中有很重要的地位。
擅長:神經網路
網址:http://deeplearning.net/software/pylearn2/
Github:http://github.com/lisa-lab/pylearn2
Pyevolve
神經網路研究更讓人興奮和不同的領域之一是遺傳演算法。從根本上說,遺傳演算法只是一個模擬自然選擇的啟發式搜尋過程。本質上它是在一些資料上測試神經網路,並從一個擬合函式中得到網路效能的反饋。然後對網路迭代地做小的、隨機的變化,再使用相同的資料進行測試。將具有高度擬合分數的網路作為輸出,然後使其作為下一個網路的父節點。
Pyevolve提供了一個用於建立和執行這類演算法很棒的框架。作者曾表示,V0.6版本也支援遺傳程式設計,所以在不久的將來,該框架將更傾向於作為一個進化的計算框架,而不只是簡單地遺傳演算法框架。
擅長:遺傳演算法的神經網路
Github:https://github.com/perone/Pyevolve
NuPIC
Nupic是另一個庫,與標準的機器學習演算法相比,它提供了一些不同的功能。它基於一個稱作層次時間記憶(HTM)的新皮層理論,。HTMs可以看作是一類神經網路,但在一些理論上有所不同。
從根本上說,HTMs是一個分層的、基於時間的記憶系統,可以接受各種資料。這意味著會成為一個新的計算框架,來模仿我們大腦中的記憶和計算是如何密不可分的。對於理論及其應用的詳細說明,請參閱 白皮書。
擅長:HTMs
Github:http://github.com/numenta/nupic
Pattern
此庫更像是一個“全套”庫,因為它不僅提供了一些機器學習演算法,而且還提供了工具來幫助你收集和分析資料。資料探勘部分可以幫助你收集來自谷歌、推特和維基百科等網路服務的資料。它也有一個Web爬蟲和HTML DOM解析器。“引入這些工具的優點就是:在同一個程式中收集和訓練資料顯得更加容易。
在文件中有個很好的例子,使用一堆推文來訓練一個分類器,用來區分一個推文是“win”還是“fail”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from pattern.web import Twitter from pattern.en import tag from pattern.vector import KNN, count twitter, knn = Twitter(), KNN() for i in range(1, 3): for tweet in twitter.search('#win OR #fail', start=i, count=100): s = tweet.text.lower() p = '#win' in s and 'WIN' or 'FAIL' v = tag(s) v = [word for word, pos in v if pos == 'JJ'] # JJ = adjective v = count(v) # {'sweet': 1} if v: knn.train(v, type=p) print knn.classify('sweet potato burger') print knn.classify('stupid autocorrect') |
首先使用twitter.search()通過標籤’#win’和’#fail’來收集推文資料。然後利用從推文中提取的形容詞來訓練一個K-近鄰(KNN)模型。經過足夠的訓練,你會得到一個分類器。僅僅只需15行程式碼,還不錯。
擅長:自然語言處理(NLP)和分類。
Github:http://github.com/clips/pattern
Caffe
Caffe是面向視覺應用領域的機器學習庫。你可能會用它來建立深度神經網路,識別影像中的實體,甚至可以識別一個視覺樣式。
Caffe提供GPU訓練的無縫整合,當你訓練影像時極力推薦使用此庫。雖然Caffe似乎主要是面向學術和研究的,但它對用於生產使用的訓練模型同樣有足夠多的用途。
擅長:神經網路/視覺深度學習
網址:http://caffe.berkeleyvision.org/
Github:https://github.com/BVLC/caffe
其它知名庫
這裡還列出了一些其它面向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