基于python的機(jī)器學(xué)習(xí)庫
毫無疑問,神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)在過去幾年一直是高科技領(lǐng)域最熱門的話題之一。這一點(diǎn)很容易看出,因?yàn)樗鼈兘鉀Q了很多真正有趣的用例,如語音識別、圖像識別、甚至是樂曲譜寫。
PyBrain的概念是將一系列的數(shù)據(jù)處理的算法封裝到被稱之為Module的模塊中。一個(gè)最小的Module通常包含基于機(jī)器學(xué)習(xí)算法的可調(diào)整的參數(shù)集合。Modules包含一個(gè)輸入和輸出的buffer,外加誤差buffer用于存在誤差反向傳播的場景。
Modules被嵌入到Network類中,并且使用ConnecTIon對象進(jìn)行連接,其中可能包含一系列可調(diào)整的參數(shù),比如連接的權(quán)重。而Network類本身又是一個(gè)Module,因此可以基于此構(gòu)建多層網(wǎng)絡(luò)結(jié)構(gòu)。庫中有快捷的方式構(gòu)造最常用網(wǎng)絡(luò)結(jié)構(gòu),但原則上這個(gè)系統(tǒng)允許嵌入最隨機(jī)的連接方式來形成一個(gè)無循環(huán)圖。
網(wǎng)絡(luò)中的參數(shù)通過Trainer進(jìn)行調(diào)節(jié),它從Dataset中學(xué)習(xí)到最優(yōu)化的參數(shù)。還有的增強(qiáng)方式的實(shí)驗(yàn)是通過相關(guān)的最優(yōu)化的目標(biāo)構(gòu)造模擬環(huán)境進(jìn)行參數(shù)學(xué)習(xí)。
Python是最好的編程語言之一,在科學(xué)計(jì)算中用途廣泛:計(jì)算機(jī)視覺、人工智能、數(shù)學(xué)、天文等。它同樣適用于機(jī)器學(xué)習(xí)也是意料之中的事。
當(dāng)然,它也有些缺點(diǎn);其中一個(gè)是工具和庫過于分散。如果你是擁有unix思維(unix-minded)的人,你會覺得每個(gè)工具只做一件事并且把它做好是非常方便的。但是你也需要知道不同庫和工具的優(yōu)缺點(diǎn),這樣在構(gòu)建系統(tǒng)時(shí)才能做出合理的決策。工具本身不能改善系統(tǒng)或產(chǎn)品,但是使用正確的工具,我們可以工作得更高效,生產(chǎn)率更高。因此了解正確的工具,對你的工作領(lǐng)域是非常重要的。
在我看來,Python是學(xué)習(xí)(和實(shí)現(xiàn))機(jī)器學(xué)習(xí)技術(shù)最好的語言之一,其原因主要有以下幾點(diǎn):
語言簡單:如今,Python成為新手程序員首選語言的主要原因是它擁有簡單的語法和龐大的社區(qū)。
功能強(qiáng)大:語法簡單并不意味著它功能薄弱。Python同樣也是數(shù)據(jù)科學(xué)家和Web程序員最受歡迎的語言之一。Python社區(qū)所創(chuàng)建的庫可以讓你做任何你想做的事,包括機(jī)器學(xué)習(xí)。
豐富的ML庫:目前有大量面向Python的機(jī)器學(xué)習(xí)庫。你可以根據(jù)你的使用情況、技術(shù)和需求從數(shù)百個(gè)庫中選擇最合適的一個(gè)。
上面最后一點(diǎn)可以說是最重要的。驅(qū)動(dòng)機(jī)器學(xué)習(xí)的算法相當(dāng)復(fù)雜,包括了很多的數(shù)學(xué)知識,所以自己動(dòng)手去實(shí)現(xiàn)它們(并保證其正常運(yùn)行)將會是一件很困難的任務(wù)。幸運(yùn)地是,有很多聰明的、有奉獻(xiàn)精神的人為我們做了這個(gè)困難的工作,因此我們只需要專注于手邊的應(yīng)用程序即可。
最受歡迎的庫我已經(jīng)對一些比較流行的庫和它們擅長的方向做了一個(gè)簡短的描述,在下一節(jié),我會給出一個(gè)更完整的項(xiàng)目列表。
Tensorflow這是清單中最新的神經(jīng)網(wǎng)絡(luò)庫。在前幾天剛剛發(fā)行,Tensorflow是高級神經(jīng)網(wǎng)絡(luò)庫,可以幫助你設(shè)計(jì)你的網(wǎng)絡(luò)架構(gòu),避免出現(xiàn)低水平的細(xì)節(jié)錯(cuò)誤。重點(diǎn)是允許你將計(jì)算表示成數(shù)據(jù)流圖,它更適合于解決復(fù)雜問題。
此庫主要使用C++編寫,包括Python綁定,所以你不必?fù)?dān)心其性能問題。我最喜歡的一個(gè)特點(diǎn)是它靈活的體系結(jié)構(gòu),允許你使用相同的API將其部署到一個(gè)或多個(gè)CPU或GPU的臺式機(jī)、服務(wù)器或者移動(dòng)設(shè)備。有此功能的庫并不多,如果要說有,Tensorflow就是其一。
它是為谷歌大腦項(xiàng)目開發(fā)的,目前已被數(shù)百名工程師使用,所以無須懷疑它是否能夠創(chuàng)造有趣的解決方案。
盡管和其它的庫一樣,你可能必須花一些時(shí)間來學(xué)習(xí)它的API,但花掉的時(shí)間應(yīng)該是很值得的。我只花了幾分鐘了解了一下它的核心功能,就已經(jīng)知道Tensorflow值得我花更多的時(shí)間讓我來實(shí)現(xiàn)我的網(wǎng)絡(luò)設(shè)計(jì),而不僅僅是通過API來使用。
擅長:神經(jīng)網(wǎng)絡(luò)
scikit-learnscikit-learn絕對是其中一個(gè),如果不是最流行的,那么也算得上是所有語言中流行的機(jī)器學(xué)習(xí)庫之一。它擁有大量的數(shù)據(jù)挖掘和數(shù)據(jù)分析功能,使其成為研究人員和開發(fā)者的首選庫。
其內(nèi)置了流行的NumPy、SciPy,matplotlib庫,因此對許多已經(jīng)使用這些庫的人來說就有一種熟悉的感覺。盡管與下面列出的其他庫相比,這個(gè)庫顯得水平層次略低,并傾向于作為許多其他機(jī)器學(xué)習(xí)實(shí)現(xiàn)的基礎(chǔ)。
scikit-learn是我們在CB Insights選用的機(jī)器學(xué)習(xí)工具。我們用它進(jìn)行分類、特征選擇、特征提取和聚集。我們最愛的一點(diǎn)是它擁有易用的一致性API,并提供了很多開箱可用的求值、診斷和交叉驗(yàn)證方法(是不是聽起來很熟悉?Python也提供了“電池已備(譯注:指開箱可用)”的方法)。錦上添花的是它底層使用Scipy數(shù)據(jù)結(jié)構(gòu),與Python中其余使用Scipy、Numpy、Pandas和Matplotlib進(jìn)行科學(xué)計(jì)算的部分適應(yīng)地很好。因此,如果你想可視化分類器的性能(比如,使用精確率與反饋率(precision-recall)圖表,或者接收者操作特征(Receiver OperaTIng CharacterisTIcs,ROC)曲線),Matplotlib可以幫助進(jìn)行快速可視化??紤]到花在清理和構(gòu)造數(shù)據(jù)的時(shí)間,使用這個(gè)庫會非常方便,因?yàn)樗梢跃o密集成到其他科學(xué)計(jì)算包上。
另外,它還包含有限的自然語言處理特征提取能力,以及詞袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency算法)、預(yù)處理(停用詞/stop-words,自定義預(yù)處理,分析器)。此外,如果你想快速對小數(shù)據(jù)集(toy dataset)進(jìn)行不同基準(zhǔn)測試的話,它自帶的數(shù)據(jù)集模塊提供了常見和有用的數(shù)據(jù)集。你還可以根據(jù)這些數(shù)據(jù)集創(chuàng)建自己的小數(shù)據(jù)集,這樣在將模型應(yīng)用到真實(shí)世界中之前,你可以按照自己的目的來檢驗(yàn)?zāi)P褪欠穹掀谕?shù)最優(yōu)化和參數(shù)調(diào)整,它也提供了網(wǎng)格搜索和隨機(jī)搜索。如果沒有強(qiáng)大的社區(qū)支持,或者維護(hù)得不好,這些特性都不可能實(shí)現(xiàn)。我們期盼它的第一個(gè)穩(wěn)定發(fā)布版。
擅長:非常多
TheanoTheano是一個(gè)機(jī)器學(xué)習(xí)庫,允許你定義、優(yōu)化和評估涉及多維數(shù)組的數(shù)學(xué)表達(dá)式,這可能是其它庫開發(fā)商的一個(gè)挫折點(diǎn)。與scikit-learn一樣,Theano也很好地整合了NumPy庫。GPU的透明使用使得Theano可以快速并且無錯(cuò)地設(shè)置,這對于那些初學(xué)者來說非常重要。然而有些人更多的是把它描述成一個(gè)研究工具,而不是當(dāng)作產(chǎn)品來使用,因此要按需使用。
Theano最好的功能之一是擁有優(yōu)秀的參考文檔和大量的教程。事實(shí)上,多虧了此庫的流行程度,使你在尋找資源的時(shí)候不會遇到太多的麻煩,比如如何得到你的模型以及運(yùn)行等。
擅長:神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)
Pylearn2大多數(shù)Pylearn2的功能實(shí)際上都是建立在Theano之上,所以它有一個(gè)非常堅(jiān)實(shí)的基礎(chǔ)。
據(jù)Pylearn2網(wǎng)址介紹:
Pylearn2不同于scikit-learn,Pylearn2旨在提供極大的靈活性,使研究者幾乎可以做任何想做的事情,而scikit-learn的目的是作為一個(gè)“黑盒”來工作,即使用戶不了解實(shí)現(xiàn)也能產(chǎn)生很好的結(jié)果。
記住,Pylearn2在合適的時(shí)候會封裝其它的庫,如scikit-learn,所以在這里你不會得到100%用戶編寫的代碼。然而,這確實(shí)很好,因?yàn)榇蠖鄶?shù)錯(cuò)誤已經(jīng)被解決了。像Pylearn2這樣的封裝庫在此列表中有很重要的地位。
擅長:神經(jīng)網(wǎng)絡(luò)