十大開發(fā)必備的Python庫,可實(shí)現(xiàn)機(jī)器學(xué)習(xí)
譯文【51CTO.com快譯】如今,Python已是流行、且使用廣泛的編程語言之一,它已經(jīng)取代了業(yè)界許多編程語言。Python備受開發(fā)人員歡迎的一項(xiàng)主要原因是,它能夠?yàn)橛脩籼峁┐罅靠晒┦褂玫膸旒稀?/p>
在本文中,我們將和您討論P(yáng)ython中的一些庫。開發(fā)人員可以使用它們來編寫、清理和表示數(shù)據(jù),并且能夠在現(xiàn)有的各種應(yīng)用程序中實(shí)現(xiàn)機(jī)器學(xué)習(xí)的效果。它們分別是:
- TensorFlow
- Scikit-Learn
- NumPy
- Keras
- PyTorch
- LightGBM
- Eli5
- SciPy
- Theano
- Pandas
1.TensorFlow
什么是TensorFlow?
如果您目前正在使用Python進(jìn)行機(jī)器學(xué)習(xí)項(xiàng)目開發(fā)的話,那么您一定聽說過TensorFlow這一流行的開源庫。它是由Google與Brain Team合作開發(fā)而成,主要用于機(jī)器學(xué)習(xí)類應(yīng)用的開發(fā)。
TensorFlow的工作方式類似于編寫大量涉及張量(tensor)操作的新的算法庫。由于神經(jīng)網(wǎng)絡(luò)可以很容易地被表示為計(jì)算圖形,因此它們可以使用TensorFlow,來作為張量上的一系列操作予以實(shí)現(xiàn)。此處,張量表示為數(shù)據(jù)的N維矩陣。
TensorFlow的特點(diǎn)
TensorFlow針對速度進(jìn)行了優(yōu)化。它利用XLA等技術(shù),實(shí)現(xiàn)了快速線性代數(shù)的運(yùn)算。
- 響應(yīng)式構(gòu)建
使用TensorFlow,我們可以輕松地可視化圖形的每一個(gè)部分。而下面將要提到的NumPy或SciKit則無此選項(xiàng)。
- 靈活
由于具有模塊化的特點(diǎn),因此Tensorflow在功能上具有靈活的可操作性,用戶可以只選用其需要的獨(dú)立部分。
- 易于訓(xùn)練
它可以通過CPU和GPU的訓(xùn)練方式,輕松地實(shí)現(xiàn)分布式計(jì)算。
- 并行神經(jīng)網(wǎng)絡(luò)訓(xùn)練
由于TensorFlow提供了流水線式的操作,因此從某種意義上說,您可以訓(xùn)練多個(gè)神經(jīng)網(wǎng)絡(luò)和多個(gè)GPU。這對于大規(guī)模系統(tǒng)上的模型來說是非常高效的。
- 大型社區(qū)
毋庸置疑,由于是Google開發(fā)的,因此一大批軟件工程師會(huì)持續(xù)致力于其穩(wěn)定性的改進(jìn)。
- 開源
由于是開源的,因此只要有互聯(lián)網(wǎng)的連接,任何人都可以使用到它。
TensorFlow的接受度
大家所熟悉的Google語音搜索、以及Google相冊等應(yīng)用都是由TensorFlow庫所開發(fā)的。雖然由TensorFlow所創(chuàng)建的庫集合都是用C和C++編寫的,但是它擁有一個(gè)復(fù)雜的Python前端。因此,您的Python代碼將會(huì)被它所編譯,然后再由C和C ++構(gòu)建的TensorFlow分布式引擎所執(zhí)行。
2.Scikit-Learn
什么是Scikit-Learn?
它是一個(gè)與NumPy和SciPy相關(guān)聯(lián)的Python庫,被認(rèn)為是處理復(fù)雜數(shù)據(jù)的Python庫之一。Scikit-Learn有很多改進(jìn)版本,其中的一種是通過交叉驗(yàn)證的功能,以及提供多個(gè)參數(shù)指標(biāo),來改進(jìn)諸如邏輯回歸、以及最近鄰居等多種訓(xùn)練的方法。
Scikit-Learn的特點(diǎn)
- 交叉驗(yàn)證:它提供許多方法來檢查、監(jiān)督模型對于不可見數(shù)據(jù)的準(zhǔn)確性。
- 無監(jiān)督學(xué)習(xí)算法:同樣,它也提供包括聚類、因子分析、主成分分析、以及無監(jiān)督神經(jīng)網(wǎng)絡(luò)等的大量算法。
- 特征提?。耗軌虮挥糜趶膱D像和文本中提取特征(例如,Bag of words)。
Scikit-Learn的接受度
它包含了大量可用于實(shí)現(xiàn)標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)、以及數(shù)據(jù)挖掘任務(wù)的算法。例如:降低維度、分類、回歸、聚類和模型選擇等。
3.NumPy
什么是NumPy?
NumPy被認(rèn)為是Python中受歡迎的機(jī)器學(xué)習(xí)庫之一。TensorFlow和其他庫在內(nèi)部都會(huì)使用NumPy來執(zhí)行多種操作。其中,數(shù)組接口是NumPy好用、也是重要的功能之一。
NumPy特點(diǎn)
- 交互式:NumPy具有強(qiáng)交互性、且易于被使用。
- 數(shù)學(xué)性:通過復(fù)雜的數(shù)學(xué),將實(shí)現(xiàn)變得非常簡單。
- 直觀:能夠?qū)⒕幋a、及概念變得簡單易懂。
- 強(qiáng)交互性:由于得到了廣泛的使用,因此它獲得了更多的開源貢獻(xiàn)。
NumPy的接受度
NumPy庫接口可以被用于將圖像、聲波、以及其他二進(jìn)制原始流,表達(dá)為N維實(shí)數(shù)數(shù)組。為了更好地將其用于機(jī)器學(xué)習(xí),全棧工程師有必要對其深入了解。
4.Keras
什么是Keras?
Keras被認(rèn)為是酷炫的機(jī)器學(xué)習(xí)類Python庫之一。它提供了一種更容易表達(dá)神經(jīng)網(wǎng)絡(luò)的機(jī)制。同時(shí),Keras還提供了一些可用于編譯模型、處理數(shù)據(jù)集、圖形可視化等方面的工具。
Keras在后端內(nèi)部使用的是Theano或TensorFlow。它可以被用在諸如CNTK之類的各種流行的神經(jīng)網(wǎng)絡(luò)上。與其他機(jī)器學(xué)習(xí)類型的庫相比,由于Keras通過使用后端的基礎(chǔ)架構(gòu)來創(chuàng)建計(jì)算圖形,因此其后續(xù)的執(zhí)行操作相對較慢。另外,Keras的所有模型都是可被移植的。
Keras的特點(diǎn)
- Keras在CPU和GPU上都能夠順利地運(yùn)行。
- Keras幾乎支持神經(jīng)網(wǎng)絡(luò)中的所有模型,包括:完全連接、卷積、匯集、循環(huán)、嵌入等。此外,這些模型也可以被組合起來構(gòu)建更為復(fù)雜的模型。
- Keras的模塊化特性,具有非凡的表現(xiàn)力、靈活性,且適合于創(chuàng)新類研究。
- Keras是一個(gè)完全基于Python的框架,開發(fā)人員可以輕松進(jìn)行各種調(diào)試。
Keras的接受度
如今,諸如Netflix、Uber、Yelp、Instacart、Zocdoc、以及Square等眾多網(wǎng)站都使用到了Keras構(gòu)建的交互性功能。許多初創(chuàng)型公司都愿意在其產(chǎn)品核心中用到Keras所提供的深度學(xué)習(xí)技術(shù)。
Keras包含了許多神經(jīng)網(wǎng)絡(luò)常用的構(gòu)建模塊,例如:各個(gè)層、對象、激活函數(shù)、優(yōu)化器、以及一系列可供處理圖像與文本數(shù)據(jù)工具。
此外,它還提供了許多預(yù)處理數(shù)據(jù)的集合、以及預(yù)訓(xùn)練的模型,其中包括:MNIST、VGG、Inception、SqueezeNet、以及ResNet等。
在接受程度上,Keras是排名第二的,被深度學(xué)習(xí)研究人員所喜愛的Python庫。一些大型科學(xué)組織,特別是CERN和NASA的研究人員,都會(huì)用到Keras。
5.PyTorch
什么是PyTorch?
PyTorch是一個(gè)大型的機(jī)器學(xué)習(xí)庫,它允許開發(fā)人員通過GPU加速,來執(zhí)行張量計(jì)算、創(chuàng)建動(dòng)態(tài)計(jì)算圖、并自動(dòng)計(jì)算出梯度。此外,PyTorch還提供了豐富的API,可用于解決與神經(jīng)網(wǎng)絡(luò)相關(guān)的應(yīng)用問題。
基于Torch的PyTorch是一個(gè)用C語言實(shí)現(xiàn)的開源機(jī)器學(xué)習(xí)庫。當(dāng)然,它也帶有Lua的包裝器。
PyTorch的特點(diǎn)
混合前端
新的混合前端在eager模式下,保證了易用性和靈活性。在被無縫地轉(zhuǎn)換到graph模式后,它能夠在C++的運(yùn)行環(huán)境中保證速度、優(yōu)化和相應(yīng)的功能。
- 分布式訓(xùn)練
得益于Python和C++能夠訪問到對等式通信的優(yōu)點(diǎn),它能夠?qū)鲜讲僮骱彤惒綀?zhí)行提供原生的支持,并且能夠優(yōu)化研究、以及生產(chǎn)環(huán)境中的性能。
- Python優(yōu)先
PyTorch并非是一種Python綁定的單體式(monolithic)C++框架。它是為深入地集成到Python中而構(gòu)建的。因此它可以與各種流行的庫、以及Cython和Numba等軟件包一同使用。
- 庫和工具
由活躍的研究人員與開發(fā)人員所構(gòu)成的社區(qū),實(shí)現(xiàn)了一個(gè)豐富的工具與庫的生態(tài)系統(tǒng)。該系統(tǒng)可以被用于擴(kuò)展PyTorch、并支持從計(jì)算機(jī)視覺到強(qiáng)化學(xué)習(xí)等領(lǐng)域的開發(fā)。
PyTorch的接受度
PyTorch由Facebook的人工智能研究小組所開發(fā),主要被用于自然語言處理等應(yīng)用,例如,Uber的Pyro軟件就將它用到了概率編程上。
如今,PyTorch在許多方面都超越了TensorFlow,并且持續(xù)引起了更多的關(guān)注。
6.LightGBM
什么是LightGBM?
Gradient Boosting是目前好用且流行的機(jī)器學(xué)習(xí)庫之一。它通過使用重新定義的基本模型與決策樹,來幫助開發(fā)人員構(gòu)建新的算法。它所提供的LightGBM、XGBoost和CatBoost等特殊庫,有助于解決常見的各種問題。
LightGBM的特點(diǎn)
- 高速的計(jì)算能力,確保了較高的生產(chǎn)率。
- 界面直觀,且對用戶友好。
- 訓(xùn)練的速度比其他深度學(xué)習(xí)庫要快。
- 在計(jì)算NaN值和其他規(guī)范值時(shí),不容易產(chǎn)生錯(cuò)誤。
LightGBM的接受度
由于具有高度可擴(kuò)展性、能夠優(yōu)化和快速實(shí)現(xiàn)梯度增強(qiáng),因此LightGBM備受機(jī)器學(xué)習(xí)開發(fā)人員,特別是全棧工程師的歡迎。
7.Eli5
什么是Eli5?
大多數(shù)情況下,機(jī)器學(xué)習(xí)模型的預(yù)測結(jié)果并不太準(zhǔn)確,而Eli5內(nèi)置Python的機(jī)器學(xué)習(xí)庫卻有助于克服這一點(diǎn)。它是對所有機(jī)器學(xué)習(xí)模型的可視化和調(diào)試的組合,并且能夠跟蹤某個(gè)算法的所有步驟。
Eli5的特點(diǎn)
此外,Eli5能夠支持XGBoost、lighting、scikit-learn和sklearn-crfsuite等其他庫,并且可以實(shí)現(xiàn)它們不同的任務(wù)。
Eli5的接受度
- 適用于需要在短時(shí)間內(nèi)進(jìn)行大量計(jì)算的數(shù)學(xué)應(yīng)用程序。
- 在與其他Python包存在依賴關(guān)系時(shí),Eli5能夠起到重要的作用。
- 能夠在各個(gè)領(lǐng)域?qū)嵤﹤鹘y(tǒng)的應(yīng)用程序、以及更新的方法。
8.SciPy
什么是SciPy?
SciPy是一個(gè)面向應(yīng)用程序開發(fā)人員和工程師的機(jī)器學(xué)習(xí)庫。與SciPy堆棧不同,SciPy庫包含了用于優(yōu)化、線性代數(shù)、積分和統(tǒng)計(jì)的模塊。
SciPy的特點(diǎn)
SciPy庫的主要特點(diǎn)是使用到了NumPy來進(jìn)行開發(fā),因此它的數(shù)組充分利用了NumPy的特點(diǎn)。此外,SciPy提供了諸如優(yōu)化、數(shù)值積分和其他特定的子模塊。這些所有子模塊里的所有功能都有著詳細(xì)配套的文檔。
SciPy的接受度
由于SciPy是一個(gè)使用NumPy來解決數(shù)學(xué)函數(shù)的庫,因此SciPy采用NumPy數(shù)組作為基本的數(shù)據(jù)結(jié)構(gòu),并附帶了用于科學(xué)編程的各種常用任務(wù)模塊。
SciPy可以輕松地處理包括:線性代數(shù)、積分(微積分)、常微分方程求解、以及信號(hào)處理在內(nèi)的各項(xiàng)任務(wù)。
9.Theano
什么是Theano?
Theano是一個(gè)在Python中可用于計(jì)算多維數(shù)組的機(jī)器學(xué)習(xí)類框架庫。Theano的工作方式類似于TensorFlow,但是其效率不及TensorFlow,因此不太適合生產(chǎn)環(huán)境。不過,與TensorFlow類似,Theano也可以被用于分布式或并行的環(huán)境之中。
Theano的特點(diǎn)
- 與NumPy緊密集成 - 用戶能夠在Theano所編譯的函數(shù)中完整地使用到NumPy數(shù)組。
- 透明地使用GPU - 執(zhí)行數(shù)據(jù)密集型計(jì)算比在CPU上更快。
- 高效的符號(hào)區(qū)分 - Theano通過一個(gè)或多個(gè)輸入,為您的函數(shù)提供衍生工具。
- 速度和穩(wěn)定性優(yōu)化 - 即使x非常小,也能獲得正確的log(1+x)的答案。
- 生成動(dòng)態(tài)C語言代碼 - 評(píng)估表達(dá)式的速度更快更高效。
- 廣泛的單元測試和自我驗(yàn)證 – 能夠檢測和診斷模型中的多種類型錯(cuò)誤。
Theano的接受度
由于Theano表達(dá)式的實(shí)際語法,僅在抽象意義上定義、編譯了后續(xù)的實(shí)際計(jì)算,因此它對于習(xí)慣了正常軟件開發(fā)的初學(xué)者來說,并不太合適。不過,在被專門用于處理深度學(xué)習(xí)時(shí),它使用到了大型神經(jīng)網(wǎng)絡(luò)算法所需的各種計(jì)算類型。另外,由于早在2007年就被開發(fā)出來了,因此Theano被認(rèn)為是深度學(xué)習(xí)研究和開發(fā)的行業(yè)標(biāo)準(zhǔn)。
我們樂觀地估計(jì),Theano的受歡迎程度會(huì)隨著時(shí)間的推移而增長。
10.Pandas
什么是Pandas?
Pandas也是一種Python類機(jī)器學(xué)習(xí)庫,它提供了高級(jí)的數(shù)據(jù)結(jié)構(gòu)和各種分析類工具。Pandas庫重要的一個(gè)特性是:能夠使用一個(gè)或兩個(gè)命令,將復(fù)雜的操作與數(shù)據(jù)進(jìn)行轉(zhuǎn)換。Pandas有許多內(nèi)置的分組方法,其中包括:數(shù)據(jù)、過濾以及時(shí)間序列功能。
Pandas的特點(diǎn)
Pandas能夠讓我們操作數(shù)據(jù)的整個(gè)過程更加容易。Pandas的功能主要包括:支持重新索引、迭代、排序、聚合、連接、以及可視化等操作。
Pandas的接受度
目前,Pandas庫的各種發(fā)布版主要集中在錯(cuò)誤修復(fù)、增強(qiáng)功能和API修改等方面。Pandas的最近一次改進(jìn),能夠讓它實(shí)現(xiàn)對于數(shù)據(jù)的分組與排序。它能夠?yàn)閼?yīng)用選擇適合的輸出方法,并為執(zhí)行各種自定義類型的操作提供支持。用戶在使用Pandas與其他庫工具一同進(jìn)行數(shù)據(jù)分析時(shí),能夠獲取較高的性能與靈活性。
原文標(biāo)題:Top 10 Python Libraries You Must Know in 2019,作者:Sayantini Deb
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】