Python是現時最好的程式設計語言之一,在科學計算領域有著廣泛的應用:電腦視覺、人工智慧、數學、天文學等等。不出所料,這也適用於機器學習。
當然,它也有一些缺點;其中之一是Python的工具和庫是分散的。如果您是一個有unix意識的人,那麼這非常方便,因為每個工具都做一件事並且做得很好。但是,這也要求您瞭解不同的庫和工具,包括它們的優缺點,以便能够為您正在構建的系統做出正確的決策。工具本身並不能使一個系統或產品變得更好,但是有了正確的工具,我們可以更有效地工作,更高效。囙此,瞭解適合您工作領域的工具至關重要。
本文旨在列出和描述可用於Python的最有用的機器學習工具和庫。為了列出這個清單,我們不需要用Python編寫庫;它有一個Python介面就足够了。最後我們還有一小部分是關於深度學習的,因為它最近受到了相當多的關注。
我們的目標不是列出Python中可用的所有機器學習庫(Python包索引返回139個“機器學習”結果),而是列出我們認為有用且維護良好的庫。此外,雖然有些模塊可以用於各種機器學習任務,但我們包括了主要關注機器學習的庫。例如,儘管Scipy有一些聚類演算法,但該模塊的主要重點不是機器學習,而是成為科學計算的一套綜合工具。囙此,我們從清單中排除了Scipy這樣的庫(儘管我們也使用它!)。
另一件值得一提的事情是,我們還根據它如何與其他科學計算庫集成來評估這個庫,因為機器學習(無論是有監督的還是無監督的)是資料處理系統的一部分。如果正在使用的庫與資料處理系統的其餘部分不匹配,那麼您可能會發現自己花費了大量時間在不同庫之間創建中間層。在您的工具集中有一個很棒的庫是很重要的,但是這個庫與其他庫很好地集成也是很重要的。
如果您在另一種語言方面很出色,但希望使用Python包,我們還將簡要介紹如何與Python集成以使用post中列出的庫。
Scikit學習
Scikit Learn是CB Insights的首選機器學習工具。我們使用它進行分類、特徵選擇、特徵選取和聚類。我們最喜歡的是它有一個一致的API,易於使用,同時還提供了許多現成的評估、診斷和交叉驗證方法(聽起來很熟悉?Python也有包含電池的方法)。錦上添花的是,它在引擎蓋下使用了Scipy資料結構,與Python中的其他科學計算(Scipy、Numpy、Pandas和Matplotlib包)非常吻合。囙此,如果要視覺化分類器的效能(例如,使用精確調用圖或接收器操作特性(ROC)曲線),可以借助Matplotlib快速視覺化這些效能。考慮到在清理和構造數據上花費了多少時間,這使得使用庫非常方便,因為它與其他科學計算包緊密集成。
此外,它還限制了自然語言處理特徵選取的能力,如包字、tfidf、預處理(停止字、自定義預處理、分析器)。此外,如果您想在toy數据集上快速執行不同的基準測試,它有一個datasets模塊,該模塊提供通用和有用的數据集。您還可以根據這些數据集構建玩具數据集,以便在將模型應用於實際數据集之前查看模型是否性能良好。對於參數優化和調整,它還提供網格蒐索和隨機蒐索。如果沒有很好的社區支持或者沒有很好的維護,這些功能就無法實現。我們期待著它的首次穩定發佈。
狀態模型
Statsmodels是另一個以統計模型為重點,主要用於預測和探索性分析的大型庫。如果你想擬合線性模型,做統計分析,也許是一點預測建模,那麼Statsmodels是一個很好的擬合。它提供的統計測試非常全面,涵蓋了大多數情况下的驗證任務。如果您是R或S用戶,則它還接受其某些統計模型的R語法。它還接受Numpy數組和Pandas數據幀,使創建中間資料結構成為過去!
PyMC公司
PyMC是Bayesian人的首選工具。它包括貝葉斯模型、統計分佈和模型收斂性診斷工具。它還包括一些層次模型。如果你想做貝葉斯分析,你應該檢查一下。
幕府
Shogun是一個機器學習工具箱,主要關注用C++編寫的支持向量機(SVM)。它是主動開發和維護的,提供了一個Python介面,Python介面大部分都有很好的檔案記錄。然而,我們發現與Scikit learn相比,它的API很難使用。此外,它也沒有提供許多現成的診斷或評估算灋。然而,它的速度是一個很大的優勢。
根西姆
Gensim被定義為“人類的主題建模”。正如其主頁所描述的,其主要關注點是潜在的Dirichlet分配(LDA)及其變體。與其他套裝軟體不同的是,它支持自然語言處理,這使得NLP流水線與其他機器學習算灋的結合更加容易。如果您的域在NLP中,並且您希望進行羣集和基本分類,則可能需要將其簽出。最近,他們將基於遞迴神經網路的文字表示word2vec從Google引入到他們的API中。這個庫完全用Python編寫。
橙色
在本文列出的庫中,Orange是唯一具有圖形使用者介面(GUI)的庫。它在分類、聚類和特徵選擇方面也相當全面,並有一些交叉驗證方法。它在某些方面(分類方法、一些預處理功能)也比Scikit learn好,但它與科學計算生態系統的其他部分(Numpy、Scipy、Matplotlib、Pandas)的配合不如Scikit learn好。
但是,與其他庫相比,擁有GUI是一個重要的優勢。您可以視覺化交叉驗證結果、模型和特性選擇方法(您需要分別為某些功能安裝Graphviz)。對於大多數算灋,Orange都有自己的資料結構,囙此您需要將數據包裝成與Orange相容的資料結構,這使得學習曲線更陡峭。
PyMVPA公司
PyMVPA是另一個統計學習庫,它與Scikit learn在API方面類似。它也有交叉驗證和診斷工具,但沒有Scikit學習的那麼全面。
深度學習
儘管深度學習是機器學習的一個分支,但是我們為這個領域創建了一個單獨的部分,因為它最近受到了Google和Facebook的大量關注。
西雅娜
Theano是最成熟的深度學習庫,它提供了很好的資料結構(張量)來表示神經網路的層,並且它們在線性代數方面與Numpy數組類似。一個警告是,它的API可能不太直觀,這會新增用戶的學習曲線。有很多庫是建立在no之上的,它們利用了no的資料結構。它還支持現成的GPU程式設計。
塔架2
還有一個庫建立在Theano之上,稱為PyLearn2,它為Theano帶來了模組化和可配置性,在這裡,您可以通過不同的設定檔創建神經網路,以便更容易地實驗不同的參數。可以說,它通過將神經網路的參數和内容分離到設定檔中,提供了更多的模組化。
脫咖啡因咖啡
Decaf是加州大學伯克利分校最近發佈的一個深度學習庫,它擁有最先進的神經網路實現,並在Imagenet分類競賽中進行了測試。
諾勒恩
如果你想在深度學習中使用優秀的Scikit learn library api,Nolearn將Decaf包裝起來,讓你的生活更輕鬆。它是一個包裝上的無咖啡因和它相容(主要)與Scikit學習,這使得無咖啡因更可怕。
超常
OverFeat是最近用C++編寫的Dogs vs Cats(kaggle competition)的贏家,但它還附帶了一個Python包裝器(以及Matlab和Lua)。它通過Torch庫使用GPU,囙此速度相當快。它還贏得了ImageNet分類中的檢測和定位競爭。如果您的主域在電腦視覺中,您可能需要檢查它。
赫貝爾
Hebel是另一個支持GPU的神經網路庫。您可以通過YAML檔案(類似於Pylearn2)來確定神經網路的内容,這提供了一種將神經網路與程式碼分離並快速運行模型的好方法。由於它是最近發展起來的,檔案缺乏深度和廣度。它在神經網路模型方面也受到限制,因為它只有一種類型的神經網路模型(前饋)。但是,它是用純Python編寫的,它將是一個很好的庫,因為它有很多實用功能,比如調度程式和監視器,我們沒有看到任何庫提供這些功能。
神經病學
NeuroLab是另一個神經網路庫,它有很好的api(如果你熟悉的話,類似於Matlab的api),它有不同於其他庫的遞迴神經網路(RNN)實現的不同變體。如果您想使用RNN,這個庫可能是使用其簡單API的最佳選擇之一。
與其他語言的集成
你不知道任何Python,但在另一種語言中很好?不要絕望!Python的一個優點是它是一種完美的粘合語言,您可以通過從Python訪問這些庫來使用您選擇的工具程式設計語言。以下各程式設計語言的套裝軟體可用於將Python與其他程式設計語言結合起來:
- R->旋轉木馬
- Matlab->matpython軟件
- Java->Jython
- 盧亞->瘋子蟒蛇
- 茱莉亞->PyCall.jl
非活動庫
這些庫已經一年多沒有發佈任何更新了,我們列出這些庫是因為有些庫可能會發現它很有用,但是不太可能維護這些庫以修復錯誤,特別是在將來進行增强:
- MDP公司
- MlPy公司
- FFnet網絡
- 侏儒
如果我們缺少一個您最喜歡的Python機器學習包,請隨時在評論中告訴我們。我們也很樂意將這個庫添加到我們的博客文章中。