歡迎光臨
每天分享高質量文章

盤點:2017年最受歡迎的十大機器學習Python庫

本文轉自機器之心公眾號,由機器之心編譯;參與:蔣思源、黃小天、劉曉坤


2017 年已經過去,又到了總結的時刻。本文作者把範圍限定為機器學習,盤點了 2017 年以來最受歡迎的十大 Python 庫;同時在這十個非常流行與強大的 Python 庫之外,本文還給出了一些同樣值得關註的 Python 庫,如 PyVips 和 skorch。


靜靜坐下來總結過去一年成就的時候。對程式員來說,則通常是回顧那些今年推出的開源庫,或者由於其極好地解決了一個特定問題而最近變的大為流行的開源庫。


過去兩年來,我們一直通過發表博文的方式做這件事,指出當年 Python 社區中出現的一些最佳工作。現在,2017 年即將結束,又到了總結的時刻。


但是這次開源庫的評選限定在了機器學習的範圍內。也許非機器學習庫的大牛認為我們有偏見,懇請你們原諒。很希望讀者在評論中對本文做出反饋,幫助我們查缺補遺未收錄的頂級軟體。


因此,放輕鬆,讓我們開始吧!


1. Pipenv


專案地址:https://github.com/pypa/pipenv

2017 年排名第一的 python 庫非 Pipenv 莫屬。它在今年初發行,但卻影響了每個 Python 開發者的工作流程,尤其是現在它成了用於管理依賴項的官方推薦工具。


Pipenv 源自大牛 Kenneth Reitz 的一個周末專案,旨在把其他軟體包管理器的想法整合進 Python。安裝 virtualenv 和 virtualenvwrapper,管理 requirements.txt 檔案,確保依賴項的依賴項版本的可復現性,以上這些統統不需要。借助 Pipenv,你可以在 Pipfile(通常使用添加、刪除或更新依賴項的命令構建它)中指定所有你的依賴項。Pipenv 可以生成一個 Pipfile.lock 檔案,使得你的構建成為決定性的,避免了尋找 bug 的困難,因為甚至你也不認為需要一些模糊的依賴項。


當然,Pipenv 還有很多其他特性,以及很好的文件,因此確保檢查完畢,再開始在所有你的 Python 專案上使用它。


2. PyTorch


專案地址:http://pytorch.org/


如果有一個庫在今年特別是在深度學習社區中大為流行,那麼它很可能是 PyTorch。PyTorch 是 Facebook 今年推出的深度學習框架。


PyTorch 構建在 Torch 框架之上,並對這個(曾經?)流行框架做了改善,尤其是 PyTorch 是基於 Python 的,這與 Lua 形成鮮明對比。鑒於過去幾年人們一直在使用 Python 進行資料科學研究,這為深度學習的普及邁出了重要一步。


最值得註意的是,由於其實現了全新的動態計算圖(Dynamic Computational Graph)範式,PyTorch 成為了眾多研究者的首選框架之一。當使用其他框架比如 TensorFlow、CNTK、MXNet 編寫代碼時,必須首先定義一個稱之為計算圖的東西。該圖指定了由我們的代碼構建的所有操作與資料流,且它在構建完後會進行編譯和利用框架潛在地優化,因此靜態計算圖能很自然地在 GPU 上實現並行處理。這一範式被稱為靜態計算圖,它很棒,因為你可以利用各種優化,並且這個圖一旦建成即可運行在不同設備上(因為執行與構建相分離)。但是,在很多任務中比如自然語言處理中,工作量經常是變動的:你可以在把圖像饋送至演算法之前把其大小重新調整為一個固定的解析度,但是相同操作不適用於陳述句,因為其長度是變化的。這正是 PyTorch 和動態圖發揮作用的地方。通過在你的代碼中使用標準的 Python 控制指令,圖在執行時將被定義,給了你對完成若干任務來說很關鍵的自由。


當然,PyTorch 也會自動計算梯度(正如你從其他現代深度學習框架中所期望的一樣),這非常快,且可擴展,何不試一試呢?


3. Caffe2


專案地址:https://caffe2.ai/


也許這聽起來有點瘋狂,但是 Facebook 在今年也發佈了另外一個很棒的深度學習框架。原始的 Caffe 框架多年來一直被廣泛使用,以無與倫比的性能和經過測試的代碼庫而聞名。但是,最近的深度學習趨勢使得該框架在一些方向上停滯不前。Caffe2 正是一次幫助 Caffe 趕上潮流的嘗試。



Caffe2 支持分佈式訓練、部署(甚至在移動端平臺)和最新的 CPU、支持 CUDA 的硬體。儘管 PyTorch 更適合於研究,但是 Caffe2 適合大規模部署,正如在 Facebook 上看到的一樣。


同樣,查看最近的 ONNX 工作。你可以在 PyTorch 中構建和訓練你的模型,同時使用 Caffe2 來部署!這是不是很棒?


4. Pendulum


專案地址:https://github.com/sdispater/pendulum


去年,Arrow——一個旨在為你減負同時使用 Python datatime 的庫入選了榜單;今年,該輪到 Pendulum 了。


Pendulum 的優點之一在於它是 Python 標準 datetime 類的直接替代品,因此你可以輕易地將其與現有代碼整合,併在你真正需要時利用其功能。作者特別註意以確保時間區正確處理,預設每個實體意識到時間區。你也會獲得擴展的 timedelta 來簡化日期時間的計算。


與其他現有庫不同,它努力使 API 具有可預測性行為,因此知道該期望什麼。如果你正在做一個涉及 datetime 的重要工作,它會使你更開心。查看該檔案獲得更多信息:https://pendulum.eustace.io/docs/。


5. Dash


專案地址:https://plot.ly/products/dash/


研究資料科學的時候你可以在 Python 生態系統中使用如 Pandas 和 scikit-learn 等非常棒的工具,還可以使用 Jupyter Notebook 管理工作流程,這對於你和同事之間的協作非常有幫助。但是,當你的分享物件並不知道如何使用這些工具的時候,該怎麼辦?如何建立一個可以讓人們輕鬆地處理資料併進行可視化的接口?過去的辦法是建立一個專業的熟悉 JavaScript 前端設計團隊,以建立所需要的 GUI,沒有其它辦法。


Dash 是幾年發佈的用於構建網頁應用(特別針對於資料可視化的高效利用)的純 Python 開源庫。它建立在 Flask、Plotly.js 和 React 的頂部,可以提供資料處理的抽象層次的接口,從而讓我們不需要再學習這些框架,進行高效的開發。該 app 可在瀏覽器上使用,以後將發佈低延遲版本,以在移動設備上使用。



可以在這個網站中查看 Dash 的有趣應用:https://plot.ly/dash/gallery。


6. PyFlux


專案地址:https://github.com/RJT1990/pyflux


Python 中有很多庫可以用於研究資料科學和機器學習,但是當你的資料點是隨時間演化的度量的時候(例如股價,甚至任何儀器測量值),這就不一樣了。


PyFlux 就是一個專用於處理時序資料的開源 Python 庫。對時序資料的研究是統計學和經濟學的一個子領域,其研究的目的可以是描述時序資料的(關於隱變數或感興趣特征的)演化行為,也可以是預測時序資料的未來狀態。


PyFlux 允許使用概率方法對時序資料建模,擁有多種現代時序資料模型的實現,例如 GARCH。


7. Fire


專案地址:https://github.com/google/python-fire


大多數情況下,我們需要為專案創建一個命令列界面(CLI)。除了傳統的 argparse 之外,Python 還有 clik 和 docopt 等很棒的工具。Fire 是今年谷歌發佈的軟體庫,它在解決這個問題上採取了不同的方法。


Fire 是能為任何 Python 專案自動生成 CLI 的開源庫。這裡的關鍵點是自動化:我們幾乎不需要編寫任何代碼或文件來構建 CLI。我們只需要呼叫一個 Fire 方法並把它傳遞到所希望構建到 CLI 中的標的,例如函式、物件、類、字典或根本不傳遞引數(這樣將會把整體代碼匯入 CLI)。


一般我們需要閱讀該專案下的指導手冊,以便通過案例瞭解它是如何工作的。


8. imbalanced-learn


專案地址:https://github.com/scikit-learn-contrib/imbalanced-learn


在理想的情況中,我們總會有完美的平衡資料集,用它來訓練模型將十分舒爽。但不幸的是,在實際中我們總有不平衡的資料集,甚至有些任務擁有非常不平衡的資料。例如,在預測信用卡欺詐的任務中絕大多數交易(99%+)都是合法的,只有極少數的行為需要演算法識別為欺詐。如果我們只是朴素地訓練 ML 演算法,那麼演算法的性能可能還不如全都預測為占比大的資料,因此在處理這一類問題時我們需要非常小心。


幸運的是,該問題已經經過充分的探討,且目前存在各種各樣的技術以解決不平衡資料。imbalanced-learn 是一個強大的 Python 包,它提供了很多解決資料不平衡的方法。此外,imbalanced-learn 與 scikit-learn 相互兼容,是 scikit-learn-contrib 專案的一部分。


9. FlashText


專案地址:https://github.com/vi3k6i5/flashtext


在大多數資料清理流程或其它工作中,我們可能需要搜索某些文本以替換為其它內容,通常我們會使用正則運算式完成這一工作。在大多數情況下,正則運算式都能完美地解決這一問題,但有時也會發生這樣的情況:我們需要搜索的項可能是成千上萬條,因此正則運算式的使用將變得十分緩慢。


為此,FlashText 提供了一個更好的解決方案。在該專案作者最初的基準測試中,它極大地縮短了整個操作的運行時間,從 5 天到 15 分鐘。FlashText 的優點在於不論搜索項有多少,它所需要的運行時都是相同的。而在常用的正則運算式中,運行時將隨著搜索項的增加而線性增長。

  1. # FlashText替代關鍵詞

  2. >>> keyword_processor.add_keyword('New Delhi', 'NCR region')

  3. >>> new_sentence = keyword_processor.replace_keywords('I love Big Apple and new delhi.')

  4. >>> new_sentence

  5. >>> # 'I love New York and NCR region.'


FlashText 證明瞭演算法和資料結構設計的重要性,即使對於簡單的問題,更好的演算法也可以輕鬆超越在最快處理器上運行的朴素實現。


10. Luminoth


專案地址:https://luminoth.ai/


如今圖像無處無在,理解圖像的內容對於許多應用程式來說都是至關重要的。值得慶幸的是,由於深度學習的進步,圖像處理技術已經有了非常大的進步。


Luminoth 是用於計算機視覺的開源 Python 工具包,它使用 TensorFlow 和 Sonnet 構建,且目前支持 Faster R-CNN 等標的檢測方法。此外,Luminoth 不僅僅是一個特定模型的實現,它的構建基於模塊化和可擴展,因此我們可以直接定製現有的部分或使用新的模型來擴展它而處理不同的問題,即盡可能對代碼進行復用。



它還提供了一些工具以輕鬆完成構建 DL 模型所需要的工程工作:將資料(圖像等)轉換為適當的格式以饋送到各種操作流程中,例如執行資料增強、在一個或多個 GPU 中執行訓練(分佈式訓練是訓練大規模模型所必需的)、執行評價度量、在 TensorBoard 中可視化資料或模型和部署模型為一個簡單的 API 接口等。所以因為 Luminoth 提供了大量的方法,我們可以通過它完成很多關於計算機視覺的任務。


此外,Luminoth 可以直接與 Google Cloud 的 ML 引擎整合,所以即使我們沒有強大的 GPU,我們也可以在雲端進行訓練。


更多優秀的 Python 庫


除了以上十個非常流行與強大的 Python 庫,今年還有一些同樣值得關註的 Python 庫,包括 PyVips、Requestium 和 skorch 等。


1. PyVips


專案地址:https://github.com/jcupitt/pyvips


你可能還沒聽過 libvips 庫,但你一定聽說過 Pillow 或 ImageMagick 等流行的圖像處理庫,它們支持廣泛的格式。然而相比這些流行的圖像處理庫,libvips 更加快速且只占很少的記憶體。例如一些基準測試表明它相比 ImageMagick 在處理速度上要快三倍,且還節省了 15 倍的記憶體占用。


PyVips 是最近發佈用於 libvips 的 Python 系結包,它與 Python 2.7-3.6(甚至是 PyPy)相兼容,它易於使用 pip 安裝。所以如果你需要處理圖像資料的應用,那麼這個庫是我們所需要關註的。


2. skorch


專案地址:https://github.com/dnouri/skorch


假設你很喜歡使用 scikit-learn 的 API,但卻遇到了需要使用 PyTorch 工作的情況,該怎麼辦?別擔心,skorch 是一個封裝,可以通過類似 sklearn 的接口提供 PyTorch 編程。如果你熟悉某些庫,就會希望使用相應的直觀可理解的句法規則。通過 skorch,你可以得到經過抽象的代碼,從而將精力集中於重要的方面。


原文鏈接:https://tryolabs.com/blog/2017/12/19/top-10-python-libraries-of-2017/

本文轉自:機器之心 公眾號;

版權宣告:本號內容部分來自互聯網,轉載請註明原文鏈接和作者,如有侵權或出處有誤請和我們聯繫。


合作請聯繫qq:365242293 


更多相關知識請回覆:“ 月光寶盒 ”;

資料分析(ID : ecshujufenxi )互聯網科技與資料圈自己的微信,也是WeMedia自媒體聯盟成員之一,WeMedia聯盟改寫5000萬人群。

赞(0)

分享創造快樂