知識碎片

xinet發表於2018-01-13

學習資料:

幾個比較好用的機器學習 Python 庫

1. PyTorch

Facebook 的深度學習框架 PyTorch 是今年最受歡迎的庫之一。

PyTorch 源於 Torch 框架,同時改善了 Torch 框架,而且 PyTorch 基於 Python 語言。過去的幾年,人們一直用 Python 做資料科學的研究,PyTorch 的出現加快了深度學習的普及。

最值得注意的是,由於實現了動態計算圖正規化, PyTorch 已經成為眾多研究人員的首選框架之一。當使用 TensorFlow、CNTK 或者 MXNet 等框架編寫程式碼時,你必須首先定義一個稱為計算圖的東西。計算圖制定了程式碼將要執行的所有操作,然後程式碼會被被編譯並利用框架優化,以便在 GPU 上更快地並行執行。這個正規化被稱為靜態計算圖,它很棒,因為你可以利用各種優化,並且圖形一旦構建完成就能執行在不同的裝置上。然而,在諸如自然語言處理等任務中,「工作量」往往是可變的:將影像餵給演算法之前,你可以把影像調整到固定的解析度,但相同的操作不能適用於語句,因為句子的長度是變化的。這正是 PyTorch 和動態圖的優勢所在,讓開發者在程式碼中使用標準的 Python 控制指令,圖形在執行時被定義,給予開發者很大的自由,這對於多工來講是必不可少的。

當然,PyTorch 可以計算梯度(就像其他深度學習模型一樣),而且非常快,可擴充套件性強,所以值得一試。

2.Caffe2

雖然聽起來很不可思議,但今年 Facebook 釋出了另一個偉大的深度學習框架 —— Caffe2。

原始的 Caffe 框架廣泛使用了多年, 它憑藉無與倫比的效能和經過測試的程式碼庫而聞名。然而,近期深度學習的發展趨勢讓該框架在某些方面停滯不前。Caffe2 則是讓 Caffe 跟上潮流的一次嘗試。

Caffe2 支援分散式訓練、部署(即使是在移動平臺上),最新的 CPU 和支援 CUDA 的硬體。PyTorch 可能更適合做研究,而 Caffe2 更加適合大規模部署,就像在 Facebook 上看到的那樣。

另外,你可以在 PyTorch 裡構建並訓練模型,同時用 Caffe2 部署!這不是很棒嗎?

3.Pendulum

Pendulum 的優勢之一在於,它是 Python 標準 datetime 替代品,因此你可以輕鬆地將其與現有的程式碼整合,並且在你需要的時候才使用它的功能。Pendulum 的作者特別注意時間分割槽的處理,預設在每個例項中時間分割槽是可用的,並且以 UTC 計時。你也可以獲得擴充套件 timedelta 來簡化 datetime 的計算。

與其他庫不同的是,Pendulum 努力讓 API 具有可預測的行為,所以你該知道期望什麼,如果你正在做與 datetime 相關的工作,那麼 Pendulum 能讓你工作得更加開心。詳細資訊請檢視文件:https://pendulum.eustace.io/docs/

4.Dash

如果你做與資料科學相關的工作,會使用到諸如 Pandas 和 scikit-learn 等 Python 生態系統中的工具,用 Jupyter Notebooks 管理工作流程。但是,你如何向那些不知道怎樣使用這些工具的人分享你的工作呢?你該怎樣構建一個互動介面,使人們可以輕鬆地處理資料,並讓整個過程視覺化?過去,你需要一個專業的 JavaScript 前端團隊來構建這些 GUI。而現在,你不再需要了。

Dash 是一個可構建 Web 應用,尤其是資料視覺化 Web 應用的純 Python 開源庫。它建立在 Flask、Plotly 和 React 之上,並提供這幾個框架的函式抽象介面,從而開發者不必學習這些框架,高效開發。這些應用程式可在瀏覽器和移動裝置中使用。

如果你想了解更多 Dash 的資訊,請查閱:

5.PyFlux

Python 中有許多庫可用於做資料科學和機器學習,但當你的資料點是隨著時間變化而變化時(例如股票資料),這就不一樣了。

PyFlux 是專門針對時間序列開發的 Python 開源庫。時間序列研究是統計學和經濟學的子領域,其目的是用於描述時間序列的行為(in terms of latent components or features of interest),同時也預測時序未來的行為狀態。

PyFlux 允許使用概率的方法對時間序列建模,並且實現了幾個時間序列模型,如 GARCH。

6.Fire

在通常情況下,你需要為你的專案製作命令列介面。除了傳統的 argparse,Python 還有一些很棒的工具,比如 Click 或者 docopt。谷歌今年宣佈的 Fire 則採用了不同的方法來解決這個問題。

Fire 是一個開源庫,可以為任何 Python 專案自動生成一個命令列介面。你幾乎不需要編寫任何程式碼或者文件,你只需要呼叫一個 Fire 方法並把它傳遞給你想要的命令列介面:一個函式、一個物件、一個類、一個庫,甚至不傳遞任何引數(這會使你的整個程式碼進入命令列介面)。

請閱讀指南來了解它的工作原理:https://github.com/google/python-fire/blob/master/docs/guide.md

7.imbalanced-learn

在理想情況下,我們有完美平衡的資料集,然後非常順利地訓練模型。不幸的是,現實不是這樣的,某些任務的資料集非常不平衡。例如,預測信用卡中的交易行為時,絕大多數(+99.9%)的交易是合法的。如果按照這樣的方式訓練演算法,會得到很糟糕的結果,所以在使用這些型別的資料集時要非常小心。

幸運的是,這個問題已經被充分地研究,也存在著各種各樣的技術來解決該問題。imbalanced-learn 是一個 Python 庫,它提供了相關的技術來解決資料不平衡的問題。另外,它和 scikit-learn 相容,並且是 scikit-learn-contrib 專案的一部分,非常有用。

8.FlashText

在資料清理工作中,你需要搜尋文件並替換特定的內容,這通常用正規表示式完成。但有時候會出現這樣的情況:你需要搜尋成千上萬的資料,然後採用正規表示式的方式會變得非常緩慢。

FlashText 是個更好的選擇。作者在最初的基準測試中,FlashText 使整個操作的執行時間大大縮短:從 5 天降到 15 分鐘。FlashText 的優點在於無論搜尋條件有多少,執行時間都是一樣的,而隨著搜尋條件的增加,正規表示式的執行時間幾乎呈線性增長。

FlashText 證明了演算法和資料結構設計的重要性,即使對於簡單的問題,更好的演算法也能夠輕鬆超越在最快 CPU 上執行的樸素實現。

9. Luminoth

影像無處不在,理解其內容對於很多應用程式來說非常重要。慶幸的是,由於深度學習的進步,影像處理技術有了很大的進步。

Luminoth 是一個用 TensorFlow 和 Sonnet 構建的開源的計算機視覺 Python 工具包。它可直接支援物體檢測,背後支援的模型是 Faster R-CNN。

但是,Luminoth 不僅能實現特定的模型,同時它還建立在模組化和可擴充套件基礎之上,所以你可以直接定製它現有的部分,或者用新的模型擴充套件它,用於處理不同的問題,儘可能地重複利用程式碼。它提供了可輕鬆構建深度學習模型的工具:將資料轉換為合適的格式反饋給各種流程中,例如用於增強資料、在一個或者多個 GPU (使用大型資料集時必須進行分散式訓練)上訓練、執行評估指標。

此外,Luminoth 直接與 Google Cloud 的機器學習引擎整合,即使你沒有強大的 GPU,也能在雲端訓練。

10.PyVips

你可能從沒聽說過 libvips 庫,它是一個影像處理庫,和 Pillow 和 ImageMagick 一樣,支援大量的格式。然而,和其他的庫相比,libvips 更快且佔用的記憶體更少。比如,一些基準測試顯示,它比 ImageMagick 快了三倍,而 ImageMagick 佔用的記憶體是 libvips 的十五倍。

PyVips 是最新發布的 libvips 的 Python 繫結包,它相容 Python2.7 ~ 3.6(甚至是 PyPy),可以非常容易的用 pip 安裝,並且和舊的繫結包相容,你可以直接使用它,不需要改變任何程式碼。

如果你的應用程式需要處理影像,你可以留意一下 PyVips。

11.Requestium

有時候,你需要在 Web 中自動化某些操作。無論是抓取網站,做應用測試,還是填寫網頁表單以便在不暴露 API 的網站中執行操作,自動化都是必須的。Python 有很好的請求庫,能夠執行相關的工作。但不幸的是,許多網站用 JavaScript 構建了一個非常龐大的客戶端,這意味著獲取的HTML 程式碼沒有表單本身,相反,它會在瀏覽器中用一個前端庫(如 React 或者 Vue)生成。

解決這個問題的方法之一是,對 JavaScript 程式碼所做的請求進行反向工程,這意味著需要花費大量的時間來除錯 JavaScript 程式碼。另一個方法是用 Selenium 這樣的庫,它可以讓你以程式設計的形式與 Web 瀏覽器互動並執行 JavaScript 程式碼。

Requestium 可以讓你從請求開始無縫切換到 Selenium,並且在需要的時候增加一個瀏覽器開銷。它整合了 Parsel,因此它在編寫用於在頁面中查詢元素的選擇器時,要比其他方式更加簡潔。

12.skorch

skorch 是一個封裝,它可以提供給 PyTorch 一個類似 sklearn 的程式設計介面。如果你熟悉這些庫,這些語法應該簡單易懂。通過 skorch,你會得到經過抽象的程式碼,所以你可以把精力花在真正重要的事情上,比如做資料科學研究。

探尋有趣之事!


相關文章