最好的Python機器學習庫
引言
毫無疑問,神經網絡和機器學習在過去幾年一直是高科技領域最熱門的話題之一。這一點很容易看出,因為它們解決了很多真正有趣的用例,如語音識別、圖像識別、甚至是樂曲譜寫。因此,在這篇文章,我決定編制一份囊括一些很好的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 推ter
from pattern.en import tag
from pattern.vector import KNN, count
推ter, knn = 推ter(), KNN()
for i in range(1, 3):
for tweet in 推ter.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')
|
首先使用推ter.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