The Best Machine Learning Libraries in Python
By Scott Robinson ? November 10, 2015
我只是大自然的翻譯工
引言
毫無(wú)疑問(wèn)轩勘,在過(guò)去的幾年里累奈,神經(jīng)網(wǎng)絡(luò)與機(jī)器學(xué)習(xí)是科技圈最熱門(mén)的話題之一。如果我們看過(guò)一些它們解決的真正有趣的案例晒屎,如語(yǔ)音識(shí)別棵介、圖像識(shí)別钉鸯、甚至是樂(lè)譜編寫(xiě)等,我們就不難看出它們?yōu)槭裁催@么火了邮辽。因此唠雕,在這篇文章中,我決定編寫(xiě)一份關(guān)于最好用的Python機(jī)器學(xué)習(xí)庫(kù)的列表吨述,并把它們羅列在下面岩睁。
我認(rèn)為,Python是你學(xué)習(xí)(與實(shí)現(xiàn))機(jī)器學(xué)習(xí)技術(shù)最好的語(yǔ)言之一揣云,理由如下:
簡(jiǎn)潔:Python正成為新手程序員的首選語(yǔ)言捕儒,得益于它簡(jiǎn)潔的語(yǔ)法和龐大的社群。
有效:Python的簡(jiǎn)單并不意味著它不實(shí)用灵再。Python同時(shí)也是數(shù)據(jù)科學(xué)家與Web程序員中最流行的語(yǔ)言之一肋层。社群中的人們?yōu)樗_(kāi)發(fā)了幾乎可以勝任所有事情的庫(kù),包括機(jī)器學(xué)習(xí)翎迁。
大量機(jī)器學(xué)習(xí)庫(kù):Python目前已經(jīng)有大量(tons of)的機(jī)器學(xué)習(xí)庫(kù)栋猖。你可以根據(jù)你的情況、技術(shù)和需求從上百個(gè)庫(kù)中選擇最適合你的一個(gè)汪榔。
最后一點(diǎn)也是最重要的一點(diǎn)蒲拉。機(jī)器學(xué)習(xí)算法通常很復(fù)雜,包含大量數(shù)學(xué)內(nèi)容痴腌,因此自行編寫(xiě)(且寫(xiě)對(duì))是最困難的任務(wù)雌团。幸運(yùn)的是,有許多聰明與專(zhuān)業(yè)的人已經(jīng)幫我們做好了這些工作士聪,因此我們可以專(zhuān)注于我們的應(yīng)用锦援。
這并不是一份詳盡的列表。相關(guān)的庫(kù)太多太多了剥悟,我在這里只列舉了一些最相關(guān)與最知名的庫(kù)灵寺。下面曼库,我們來(lái)看一下清單。
最流行的庫(kù)
我為一些最流行的庫(kù)寫(xiě)了簡(jiǎn)短的描述和它們所擅長(zhǎng)的方面略板。下一節(jié)我將給出一份更詳盡的項(xiàng)目列表毁枯。
Tensorflow
這是這份列表中最新的神經(jīng)網(wǎng)絡(luò)庫(kù),前幾天才剛被公布叮称。Tensorflow是一個(gè)高層神經(jīng)網(wǎng)絡(luò)庫(kù)种玛,能幫助你設(shè)計(jì)網(wǎng)絡(luò)架構(gòu),并規(guī)避低層細(xì)節(jié)瓤檐。重點(diǎn)是它允許你將計(jì)算表示成數(shù)據(jù)流圖(data flow graph)赂韵,它更適用于解決復(fù)雜問(wèn)題。
Tensorflow主要用C++編寫(xiě)距帅,并包含Python綁定右锨,因此你無(wú)需煩惱性能問(wèn)題。我最喜歡的特性之一是它靈活的結(jié)構(gòu)碌秸,它允許你用相同的API將它部署到一個(gè)或多個(gè)桌面計(jì)算機(jī)、服務(wù)器或移動(dòng)設(shè)備的CPU或GPU上悄窃。沒(méi)有多少庫(kù)能提供這樣的功能讥电,如果有的話,Tensorflow就是其中之一轧抗。
它是為了Google Brain項(xiàng)目所開(kāi)發(fā)出來(lái)的恩敌,并且已被Google中數(shù)百名工程師所使用,因此無(wú)須懷疑它解決問(wèn)題的能力横媚。
像大多數(shù)庫(kù)一樣纠炮,你可能需要花一點(diǎn)時(shí)間來(lái)學(xué)習(xí)它的API,但這些時(shí)間是值得的灯蝴。我只用了幾分鐘了解了一下它的核心特性恢口,我已經(jīng)可以說(shuō)Tensorflow值得我花更多的時(shí)間來(lái)實(shí)現(xiàn)我的網(wǎng)絡(luò)設(shè)計(jì),而不是糾結(jié)于API穷躁。
擅長(zhǎng):神經(jīng)網(wǎng)絡(luò)
Scikit-learn
Scikit-learn如果不是最流行的耕肩,也絕對(duì)是所有語(yǔ)言的機(jī)器學(xué)習(xí)庫(kù)中最流行的之一。它包含了大量的數(shù)據(jù)挖掘與數(shù)據(jù)分析功能问潭,使它成為研究人員和開(kāi)發(fā)人員的首選庫(kù)猿诸。
它基于最流行的NumPy,SciPy和matplotlib編寫(xiě)狡忙,因此對(duì)于已經(jīng)在使用這些庫(kù)的人來(lái)說(shuō)會(huì)感到很熟悉梳虽。盡管與列表下面的一些庫(kù)比起來(lái)它要稍微低層次一些,并且傾向于作為其他機(jī)器學(xué)習(xí)實(shí)現(xiàn)的基礎(chǔ)灾茁。
擅長(zhǎng):幾乎所有
Theano
Theano允許你定義窜觉、優(yōu)化和評(píng)估涉及多維數(shù)組的數(shù)學(xué)表達(dá)式谷炸,這可能會(huì)讓其他庫(kù)的開(kāi)發(fā)者感到一點(diǎn)挫敗。像scikit-learn一樣竖螃,theano也與NumPy緊密集合淑廊。GPU的透明使用令theano可以快速且無(wú)痛(譯:f**k,我不信)地設(shè)置特咆,這正是很多初學(xué)者的痛點(diǎn)季惩。盡管有些人說(shuō)它更像一個(gè)研究工具而無(wú)法生產(chǎn)運(yùn)用,所以請(qǐng)按需使用腻格。
Theano最好的特點(diǎn)之一是它完善的文檔和大量的教程画拾。得益于該庫(kù)的流行,你在尋找資源建立模型和運(yùn)行模型時(shí)不會(huì)遇到太多麻煩菜职。
擅長(zhǎng):神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)
Pylearn2
大多數(shù)Pylearn2的功能實(shí)際上都建立在Theano上青抛,因此它有一個(gè)堅(jiān)實(shí)的基礎(chǔ)。
根據(jù)Pylearn2的官網(wǎng):
Pylearn2 differs from scikit-learn in that Pylearn2 aimsto provide great flexibility and make it possible for a researcher to do almostanything, while scikit-learn aims to work as a “black box” that can producegood results even if the user does not understand the implementation.
Pylearn2與scikit-learn的不同之處在于Pylearn2旨在提供極佳的靈活性酬核,使研究人員可以做幾乎任何工作蜜另,而scikit-learn旨在提供一個(gè)可以產(chǎn)出較好結(jié)果的“黑箱”,即使使用者并不理解其實(shí)現(xiàn)嫡意。(譯:damn right)
記住Pylearn2在合適的時(shí)候會(huì)封裝其他庫(kù)的代碼举瑰,比如scikit-learn,因此你得到的并不是100%的自定義代碼蔬螟。在大多數(shù)BUG已經(jīng)被發(fā)現(xiàn)的情況下此迅,這是很好的。像pylearn2這樣的封裝包在該列表中十分重要旧巾。
擅長(zhǎng):神經(jīng)網(wǎng)絡(luò)
Pyevolve
神經(jīng)網(wǎng)絡(luò)研究中相當(dāng)令人興奮與不同的領(lǐng)域之一莫過(guò)于遺傳算法耸序。遺傳算法基本上是一個(gè)模擬自然選擇過(guò)程的搜索算法。它主要對(duì)一些數(shù)據(jù)建立一個(gè)神經(jīng)網(wǎng)絡(luò)鲁猩,并從一個(gè)擬合函數(shù)得到網(wǎng)絡(luò)性能的反饋坎怪。然后,它反復(fù)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行小的绳匀、隨機(jī)的改變芋忿,并用同樣的數(shù)據(jù)再次測(cè)試。擬合分?jǐn)?shù)較高的神經(jīng)網(wǎng)絡(luò)最終勝出疾棵,并作為新一輪網(wǎng)絡(luò)的父類(lèi)戈钢。
Pyevolve提供了一個(gè)很好的框架來(lái)構(gòu)建和執(zhí)行這類(lèi)算法。盡管作者已經(jīng)申明是尔,僅到v0.6版本為止該框架依然支持遺傳程序殉了,所以在不久的將來(lái),該框架會(huì)更傾向于成為一個(gè)進(jìn)化計(jì)算框架(Evolutionary Computation?framework)而不僅僅是簡(jiǎn)單的遺傳算法框架拟枚。
擅長(zhǎng):基于遺傳算法的神經(jīng)網(wǎng)絡(luò)
NuPIC
NuPIC提供一些與標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)算法所不同的功能薪铜。它基于一種被稱(chēng)為“分層時(shí)間記憶”(Hierarchical Temporal?Memory, HTM)的大腦皮層理論众弓。HTMs可以被視為一種神經(jīng)網(wǎng)絡(luò),但在一些理論上有點(diǎn)不同隔箍。
從根本上講谓娃,HTMs是一種可以對(duì)各種數(shù)據(jù)進(jìn)行訓(xùn)練的分層的、基于時(shí)間的記憶系統(tǒng)蜒滩。這意味著一種全新的計(jì)算框架滨达,模擬記憶與計(jì)算在大腦中是如何進(jìn)行的。對(duì)該理論與其應(yīng)用的完整說(shuō)明俯艰,請(qǐng)查閱白皮書(shū)捡遍。
擅長(zhǎng):HTMs
Pattern
Pattern更像一個(gè)“全套”庫(kù),在于它不僅提供機(jī)器學(xué)習(xí)算法竹握,也提供收集與分析數(shù)據(jù)的工具画株。它的數(shù)據(jù)挖掘部分能幫助你收集網(wǎng)絡(luò)服務(wù)的數(shù)據(jù),如Google啦辐,Twitter和Wikipedia等谓传。它也包含網(wǎng)絡(luò)爬蟲(chóng)與HTML DOM解釋器。包含這些工具的優(yōu)點(diǎn)是在同一個(gè)程序中收集和訓(xùn)練數(shù)據(jù)顯得更加容易芹关。(譯:I don’t think so.)
下面是文檔中一個(gè)很好的例子良拼,通過(guò)使用一系列tweets來(lái)訓(xùn)練一個(gè)關(guān)于一條tweet是“win”還是“fail”的分類(lèi)器。
這些tweets首先根據(jù)'#win'和'#fail'標(biāo)簽充边,使用twitter.search()來(lái)搜集。然后使用從tweets中提取的形容詞來(lái)訓(xùn)練一個(gè)K近鄰(k-nearest neighbor, KNN)分類(lèi)器常侦。經(jīng)過(guò)足夠的訓(xùn)練后浇冰,你就擁有一個(gè)成熟的分類(lèi)器了。對(duì)于一段15行的程序來(lái)說(shuō)算不錯(cuò)了吧聋亡。
擅長(zhǎng):自然語(yǔ)言處理肘习,聚類(lèi)和分類(lèi)
Caffe
Caffe是一個(gè)用于視覺(jué)應(yīng)用的機(jī)器學(xué)習(xí)庫(kù)。你可以用它來(lái)創(chuàng)建用來(lái)從圖像中識(shí)別物體的深度神經(jīng)網(wǎng)絡(luò)坡倔,甚至是識(shí)別視覺(jué)風(fēng)格漂佩。它提供GPU訓(xùn)練的無(wú)縫集成,強(qiáng)烈建議你在訓(xùn)練圖像的時(shí)候使用它罪塔。雖然該庫(kù)常被用作學(xué)術(shù)和研究投蝉,但它應(yīng)該也有很多在生產(chǎn)環(huán)境中訓(xùn)練模型的使用者。
擅長(zhǎng):針對(duì)計(jì)算機(jī)視覺(jué)的神經(jīng)網(wǎng)絡(luò)/深度學(xué)習(xí)
其他著名的庫(kù)
這里還有列表中不少Python機(jī)器學(xué)習(xí)庫(kù)征堪。其中有一些與上述庫(kù)提供相同的功能瘩缆,其他則有更窄的用途或用來(lái)作為學(xué)習(xí)工具。
(譯:I’ll end here.)