Python在科學計算中用途廣泛:電腦視覺、人工智慧、數學、天文等。它同樣適用於機器學習也是意料之中的事。
這篇文章就列舉並描述Python的最有用的機器學習工具和函式庫。這個清單中,我們不要求這些函式庫是用Python寫的,只要有Python介面就夠了。
我們的目的不是列出Python中所有機器學習庫(搜尋「機器學習」時Python套件索引(PyPI)返回了139個結果),而是列出我們所知的有用並且維護良好的那些。
另外,儘管有些模組可以用於多種機器學習任務,我們只列出主要焦點在機器學習的庫。例如,雖然Scipy1包含一些聚類演算法,但它的主焦點不是機器學習而是全面的科學計算工具集。因此我們排除了Scipy(儘管我們也使用它!)。
另一個需要提到的是,我們同樣會根據與其他科學計算庫的整合效果來評估這些函式庫,因為機器學習(有監督的或無監督的)也是資料處理系統的一部分。如果你使用的函式庫與資料處理系統其他的函式庫不相配,你就要花大量時間創建不同函式庫之間的中間層。在工具集中有個很棒的函式庫很重要,但這個函式庫能與其他函式庫良好整合也同樣重要。
如果你擅長其他語言,但也想使用Python包,我們也簡單地描述如何與Python整合來使用這篇文章列出的函式庫。
Scikit Learn7是我們在CB Insights選用的機器學習工具。我們用它進行分類、特徵選擇、特徵提取和聚集。
我們最愛的一點是它擁有易用的一致性API,並提供了**很多**開箱可用的求值、診斷和交叉驗證方法(是不是聽起來很熟悉?Python也提供了「電池已備(譯註:指開箱可用)」的方法)。錦上添花的是它底層使用Scipy資料結構,與Python中其餘使用Scipy、Numpy、Pandas和Matplotlib進行科學計算的部分適應地很好。
因此,如果你想視覺化分類器的性能(比如,使用精確率與反饋率(precision-recall)圖表,或者接收者操作特徵(Receiver Operating Characteristics,ROC)曲線),Matplotlib可以幫助進行快速可視化。
考慮到花在清理和建構資料的時間,使用這個函式庫會非常方便,因為它可以緊密整合到其他科學計算套件上。
另外,它還包含有限的自然語言處理特徵提取能力,以及詞袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency演算法)、預處理(停用詞/stop-words,自訂預處理,分析器)。
此外,如果你想快速對小資料集(toy dataset)進行不同基準測試的話,它自帶的資料集模組提供了常見且有用的資料集。你也可以根據這些資料集建立自己的小資料集,這樣在將模型應用到真實世界之前,你可以按照自己的目的來檢驗模型是否符合期望。對參數最優化和參數調整,它也提供了網格搜尋和隨機搜尋。
如果沒有強大的社群支持,或是維護得不好,這些特性都不可能實現。我們期盼它的第一個穩定發行版。
Statsmodels是另一個聚焦在統計模型上的強大的函式庫,主要用於預測性和探索性分析。如果你想擬合線性模型、進行統計分析,或預測性建模,那麼Statsmodels非常適合。它提供的統計測試相當全面,涵蓋了大部分情況的驗證任務。
如果你是R或S的用戶,它也提供了某些統計模型的R語法。它的模型同時也接受Numpy數組和Pandas資料幀,讓中間資料結構成為過去!
PyMC是做**貝葉斯曲線**的工具。它包含貝葉斯模型、統計分佈和模型收斂的診斷工具,也包含一些層次模型。如果想進行貝葉斯分析,你應該看看。
Shogun1是聚焦在支援向量機(Support Vector Machines, SVM)上的機器學習工具箱,用C++寫。它正處於積極開發和維護中,提供了Python接口,也是文檔化最好的接口。但是,相對於Scikit-learn,我們發現它的API比較難用。而且,也沒提供很多開箱可用的診斷和求值演算法。但是,速度是個很大的優勢。
Gensim被定義為「人們的主題建模工具(topic modeling for humans)」。在它的主頁上描述,其焦點是狄利克雷劃分(Latent Dirichlet Allocation, LDA)及變體。不同於其他包,它支援自然語言處理,能將NLP和其他機器學習演算法更容易組合在一起。
如果你的領域在NLP,並想進行聚集和基本的分類,你可以看看。目前,它們引入了Google的基於遞歸神經網路(Recurrent Neural Network)的文本表示法word2vec。這個函式庫只使用Python編寫。
Orange是這篇文章所列舉的所有函式庫中唯一帶有圖形使用者介面(Graphical User Interface,GUI)的。對分類、聚集和特徵選擇方法而言,它是相當全面的,還有些交叉驗證的方法。在某些方面比Scikit-learn還要好(分類方法、一些預處理能力),但與其他科學計算系統(Numpy, Scipy, Matplotlib, Pandas)的適配上比不上Scikit-learn。
但是,包含GUI是個很重要的優勢。你可以視覺化交叉驗證的結果、模型和特徵選擇方法(某些功能需要安裝Graphviz)。對大多數演算法,Orange都有自己的資料結構,所以你需要將資料包裝成Orange相容的資料結構,這使得其學習曲線更陡。
PyMVPA是另一個統計學習函式庫,API上與Scikit-learn很像。包含交叉驗證和診斷工具,但沒有Scikit-learn全面。
深度學習
儘管深度學習是機器學習的子節,我們在這裡創建單獨一節的原因是,它最新吸引了Google和Facebook人才招募部門的許多注意。
Theano是最成熟的深度學習庫。它提供了不錯的資料結構(張量,tensor)來表示神經網路的層,對線性代數來說很高效,與Numpy的陣列類似。要注意的是,它的API可能不是很直觀,使用者的學習曲線會很高。有很多基於Theano的庫都在利用其資料結構。它同時支援開箱可用的GPU編程。
還有另一個基於Theano的函式庫,PyLearn2,它給Theano引入了模組化和可配置性,你可以透過不同的設定檔來建立神經網絡,這樣嘗試不同的參數會更容易。可以說,如果分離神經網路的參數和屬性到配置文件,它的模組化能力更強大。
Decaf是最近由UC Berkeley發布的深度學習庫,在Imagenet分類挑戰中測試發現,其神經網路實作是很先進的(state of art)。
如果你想在深度學習中也能使用優秀的Scikit-learn函式庫API,封裝了Decaf的Nolearn會讓你更輕鬆地使用它。它是對Decaf的包裝,與Scikit-learn相容(大部分),使得Decaf更不可思議。
OverFeat是最近貓vs.狗(kaggle挑戰)4的勝利者,它使用C++編寫,也包含一個Python包裝器(還有Matlab和Lua)。透過Torch庫使用GPU,所以速度很快。也贏得了ImageNet分類的偵測與在地化挑戰。如果你的領域是電腦視覺,你可能需要看看。
Hebel是另一個具有GPU支援的神經網路庫,開箱可用。你可以透過YAML檔案(與Pylearn2類似)決定神經網路的屬性,提供了將神級網路和程式碼友善分離的方式,可以快速地運行模型。由於開發不久,就深度和廣度上說,文件很匱乏。就神經網路模型來說,也是有限制的,因為只支援一種神經網路模型(正向回饋,feed-forward)。
但是,它是用純Python編寫,將會是很友善的函式庫,因為包含很多實用函數,像是調度器和監視器,其他函式庫中我們並沒有發現這些功能。
NeuroLab是另一個API友善(與Matlabapi類似)的神經網路函式庫。與其他庫不同,它包含遞歸神經網路(Recurrent Neural Network,RNN)實現的不同變體。如果你想使用RNN,這個函式庫是同類API中最好的選擇之一。
你不了解Python但是很擅長其他語言?不要絕望!Python(還有其他)的一個強項就是它是一個完美的膠水語言,你可以使用自己常用的程式語言,透過Python來存取這些函式庫。以下適合各種程式語言的套件可以用於將其他語言與Python組合在一起:
R -> RPython
Matlab -> matpython
#Java - > Jython
Lua -> Lunatic Python
Julia -> PyCall.jl
這些庫超過一年沒有發布任何更新,我們列出是因為你有可能會有用,但是這些庫不太可能會進行BUG修復,特別是未來進行增強。
MDP2MlPy
FFnet
PyBrain
以上是總結Python常用的機器學習庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!