2017年十大最受歡迎機器學習Python庫
摘要: Python已經成為機器學習時代的最受歡迎的語言,業內大牛正在使用什麼Python庫呢?今天我們就來盤點一下2017年十大最受歡迎的機器學習Python庫。
每年的十二月是每個人review過去一年成就的時候,在看自己成就的同時,也同時為未來做好打算。對於程序員來說,十二月通常是回顧今年發布的開源庫或者是最近流行的開源庫,因為它們是在未來一段時間內解決我們問題的絕佳工具。
AI的快速發展,讓機器學習走向了巔峰,今天我們就藉此盤點一下2017年最受歡迎的機器學習庫(ML),希望你能夠在這裡尋找到你未來一段時間內的「利器」。
1. Pipenv
Pipenv是今年初開源的用於管理依賴項的官方推薦工具。Pipenv最初是由Kenneth Reitz創立的一個項目,旨在將其他包管理器(如NPM或yarn)的創意整合至Python中。安裝virtualenv和virtualenvwrapper,並確保依賴項的依賴項版本的可重複性(在這裡閱讀更多關於這方面的信息)。使用Pipenv,你可以指定所有的依賴關係,通常使用命令添加,刪除或更新依賴項。該工具可以生成一個文件,使得你的構建是確定性的,它可以幫助你避免那些難以捉住的BUG。
2. PyTorch
今年Facebook推出的DLT框架PyTorch,在深度學習社區中很受歡迎。PyTorch是構建在流行的Torch框架之上,尤其是它是基於Python的。考慮到過去幾年人們一直在使用Python進行數據科學研究,這也是深度學習庫大部分是使用Python的原因。
最值得注意的是,PyTorch已經成為了眾多研究人員的首選框架之一,因為它實現了新穎的動態計算圖範例(Dynamic Computational Graph paradigm)。當使用TensorFlow,CNTK或MXNet等框架編寫代碼時,必須首先定義一個稱為計算圖的東西。該圖指定了我們的代碼將運行的所有操作,這些操作稍後會被編譯並被框架優化,以便能夠在GPU上並行運行得更快。這個範例被稱為靜態計算圖,因為你可以利用各種優化,而且這個圖形一旦建成,就可以運行在不同的設備上。然而,在諸如自然語言處理之類的任務中,工作量通常是可變的。在將圖像提供給演算法之前,把圖像調整為固定的解析度,但不能對可變長度的句子進行相同的處理。這恰恰能體現PyTorch和動態圖表的優勢,通過讓你在代碼中使用標準的Python控制指令,圖形將在執行時定義,給你更多自由空間,這對於幾個任務來說是必不可少的。
當然,PyTorch也會自動計算梯度,並且速度非常快,而且是可擴展的。
3. Caffe2
這聽起來可能不太現實,Facebook今年也發布了另一個的DL框架——caffe2。原來的Caffe框架已被廣泛使用多年,並以非常不錯的性能和經過測試的代碼庫而聞名。然而,最近DL的趨勢使這個框架在某些方面顯得有些out。於是Caffe2就成為了它的替代品。
Caffe2支持分散式訓練、部署,支持最新的CPU和CUDA的硬體。雖然PyTorch可能更適合研究,但Caffe2更適合大規模部署。其實,你可以在PyTorch中構建和訓練模型,同時使用Caffe2進行部署!這不是很好嗎?
4. Pendulum
去年,Arrow是一個旨在使你更輕鬆,同時使用Python date time類進入了榜單,而今年是Pendulum。
Pendulum的優點之一是它是Python標準datetime類直接替代品,因此你可以輕鬆地將其與現有代碼集成,並且只有在需要時才能使用其功能。作者特別注意確保時區能夠正確處理,默認情況下使每個實例時區感知自己的時區。你也將得到一個擴展timedelta,這樣日期時間算術更容易。
與其他的庫不同,它努力使API具有可預測的行為。如果你正在做一些涉及日期的小事,請查看更多的文檔。
5. Dash
如果你正在做數據科學,你可能會使用Python生態系統中的Pandas和scikit-learn等優秀的工具。還可以使用JupyterNotebook管理你的工作流程。但是,當你和那些不知道如何使用這些工具的人一起做一項工作的時候,你該怎麼辦?你如何建立一個界面,使人們可以輕鬆地玩轉數據,並在整個過程中對其進行可視化?過去,你或許需要一個專業的JavaScript前端團隊來構建這些GUI。
Dash近幾年發布的一個用於構建Web應用程序的開源庫,尤其是在純Python語言中利用數據可視化的Web應用程序。它建立在Flask,Plotly.js和React 之上,並提供了介面,所以你不必學習這些框架也能進行高效的開發。如果你想了解更多關於Dash的有趣應用,點擊這個地方。
6. PyFlux
Python中有許多庫用於研究數據科學和ML,但是當你的數據是隨著時間的推移而變化的度量(例如股票價格,儀器的測量值等等)時,這對於大部分庫來說是一個比較棘手的問題。
PyFlux是一個專門為時間序列而開發的 Python開源庫。時間序列研究是統計學和計量經濟學的一個子領域,目標可以描述時間序列如何表現(以潛在的因素或興趣的特徵來表示),也可以藉此預測未來的行為。
PyFlux允許使用時間序列建模,並且已經實現了像GARCH這樣的現代時間序列模型。
7. Fire
通常情況下,你需要為你的項目製作命令行界面(CLI)。除了傳統的argparse,Python還有一些這樣的工具,Clik和docopt。Fire是今年穀歌發布的軟體庫,在解決這個的問題上採用了不同的方法。
Fire是一個開源的庫,可以為任何Python項目自動生成一個CLI,關鍵是自動,你幾乎不需要編寫任何代碼或文檔來構建你的CLI!你只需要調用一個Fire方法並把它所需要構建的傳遞給CLI。
如果你想對此有所深入了解,請閱讀指南,因為這個庫可以為你節省很多時間。
8. Imbalanced-learn
在理想的情況下,我們會有完美平衡的數據集,但不幸的是,現實世界並不是這樣的,某些任務擁有非常不平衡的數據。例如,在預測信用卡交易中的欺詐行為時,你預計絕大多數交易(99.9%)是合法的。天真地訓練ML演算法會導致令人失望的性能,所以在處理這些類型的數據集時需要特別小心。
幸運的是,Imbalanced-learn是一個Python包,它提供了一些解決這類問題的方法,並提供一些技術的實現,它與scikit-learn兼容,是scikit-learn-contrib項目的一部分。
9. FlashText
如果你需要搜索某些文本並將其替換為其他內容(如大多數數據清理流程中),則通常會轉為正則表達式。通常情況下,正則表達式考研完美的解決問題。但是有時會發生這樣的情況:你需要搜索的術語數量是成千上萬,然後,正則表達式可能變得非常緩慢。這時FlashText是一個更好的選擇,它使整個操作的運行時間大大提高了(從5天到15分鐘)。FlashText的優點在於無論搜索條件有多少,運行時都是一樣的,而正則表達式中運行時將隨著條件數幾乎呈線性增長。
FlashText證明了演算法和數據結構設計的重要性,即使對於簡單的問題,更好的演算法也可以輕鬆超越最快的CPU。
10. Luminoth
現實生活中圖像無處不在,理解其內容對於多個應用程序來說是至關重要的。值得慶幸的是,由於DL的發展,圖像處理技術已經進步很多。
Luminoth是一個使用TensorFlow和Sonnet構建的用於計算機視覺的開源Python工具包。目前,它可以支持被稱為Faster R-CNN的模型的形式進行對象檢測。
並且Luminoth不僅是一個特定模型的實現,而是建立在模塊化和可擴展的基礎上的,所以定製現有的部分或用新的模型來擴展它來處理不同的問題,就可以能多地重用代碼。它提供了用於輕鬆完成構建DL模型所需的工程工作如:將你的數據轉換為用於提供數據管道(TensorFlow的記錄)的格式,執行數據增強,在多個GPU訓練,運行評估指標,在TensorBoard中可視化,並用簡單的API或瀏覽器界面部署訓練有素的模型,以便人們使用。
其他優秀的Python庫:
1.PyVips
你可能從來沒有聽說過libvips庫,首先它是一個圖像處理庫,如Pillow或ImageMagick,並支持多種格式。但是,與其他庫相比,libvips速度更快,佔用的內存也更少。PyVips是最近發布的用於libvips的Python綁定包,它與Python 2.7-3.6(甚至PyPy)兼容,易於使用pip。如果在你的應用程序中需要進行某種形式的圖像處理,可以考慮一下它。
2.Requestium
有時,你需要自動化網路中的某些操作,如抓取網站,進行應用程序測試,填寫網頁表單,要想在不暴露API的網站中執行操作,自動化是必需的。Python有很好的請求庫,可以讓你執行一些這樣的操作,但不幸的是請求獲取的HTML代碼可能沒有表單,你可能會嘗試查找表單來填充自動化任務。解決這個問題的方法是對JavaScript代碼所做的請求進行反向工程,這將意味著需要花費很多時間來調試。另一個選擇是轉向使用Selenium這樣的庫,它允許你以編程方式與Web瀏覽器交互並運行Javascript代碼。有了這個,問題就可以解決了。
Requestium庫可以讓你從請求開始並無縫地切換到使用Selenium,它可以作為一個請求的直接替換。它還集成了Parsel,因此編寫所有用於在頁面中查找元素的選擇器要比其它方式更加快捷。
3.skorch
假如你很喜歡使用scikit-learn的API,但是遇到了需要使用PyTorch來完成工作。不要擔心,skorch是一個封裝,可以通過類似sklearn的介面提供PyTorch編程。如果你熟悉這些庫,那麼語法將很簡單易懂。通過skorch,你會得到一些抽象的代碼,所以你可以把更多的精力放在真正重要的事情上,比如做數據科學。
本文由阿里云云棲社區組織翻譯。
文章原標題《top-10-python-libraries-of-2017》,
作者:Alan Descoins 博客地址:https://tryolabs.com/blog/authors/alan-descoins/
譯者:虎說八道
文章為簡譯,更為詳細的內容,請查看原文
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
※使用Python進行語音識別---將音頻轉為文字
※Python—PIL基本概念介紹
※為什麼我總是感覺python的語法很挫了,有人有同感嗎?
※markdown for academia
※學員筆記|Python數據分析之numpy入門(三)