資源 | Python上的圖模型與概率建模工具包:pomegranate

 2018-01-10 13:06:00.0

原標題:資源 | Python上的圖模型與概率建模工具包:pomegranate

選自GitHub

近日,pomegranate 的作者宣佈發佈新版本 pomegranate v0.9.0。新版本爲概率分佈、k 均值、混合模型、隱馬爾可夫模型、貝葉斯網絡、樸素貝葉斯/貝葉斯分類器等模型提供模型擬合、結構化學習和推斷過程的修正,並重點關注於處理數據缺失值。

  • 文檔地址:http://pomegranate.readthedocs.io/en/latest/

  • GitHub 地址:https://github.com/jmschrei/pomegranate

新版重點關注於缺失值的處理,而我們通常的方法是僅從觀察中收集充分數據,並忽略或設定相近的值來代替缺失值。但 pomegranate v0.9.0 會比常見的簡單填補方法有更好的結果。作者還宣佈適用於所有概率圖模型的缺失值處理方法已經調試完畢,不過可能還需修復一些問題。

pomegranate v0.9.0 所做的修正有:

  • 添加了「缺失值」部分的文檔。

  • 添加如何進行缺失值處理的擴展教程。

  • 添加了之前作者在 ODSC west 2017 演講中提到的一些功能。

pomegranate 的模塊化本質意味着大家現在可以把缺失值支持和其他功能結合起來用。例如,你可以輕鬆添加多線程以加快模型速度,或者使用不完整的數據集進行 out-of-core 學習,或用不完整的數據和標籤進行半監督學習。

複製該 GitHub repo 或者運行 pip install pomegranate 即可安裝 pomegranate。這一次更新確實非常有助於開發者處理更加複雜的概率圖模型,它所注重的缺失值處理也優於一般樸素的處理方法。既然這次更新這麼有誠意,它所推薦的缺失值處理也非常有效,那麼 pomegranate 到底是什麼?以下我們將簡要介紹 pomegranate 的特性、安裝方法與該系統的研究論文。

pomegranate 簡介

pomegranate 是基於 Python 的圖模型和概率模型工具包,它使用 Cython 實現以加快反應速度。它源於 YAHMM,可實現快速、高效和極度靈活的概率模型,如概率分佈、貝葉斯網絡、混合隱馬爾可夫模型等。概率建模最基礎的級別是簡單的概率分佈。以語言建模爲例,概率分佈就是是一個人所說的每個單詞出現頻率的分佈。

1. 概率分佈

第二個級別是以更復雜的方式使用簡單分佈的概率模型。馬爾可夫鏈可以擴展簡單的概率分佈,仍舊以語言建模爲例,即某個單詞的概率依賴於先前所說單詞。隱馬爾可夫模型中某個單詞的概率依賴於前一個詞的潛在/隱藏狀態,如名詞通常在形容詞後面。

  • 馬爾可夫鏈

  • 貝葉斯分類器和樸素貝葉斯

  • 一般混合模型

  • 隱馬爾可夫模型

  • 貝葉斯網絡

  • 因子圖

第三個級別是概率模型的堆疊,可以建模更復雜的現象。如果單個隱馬爾可夫模型可以捕捉口音(如某個人的說話習慣),那麼混合隱馬爾可夫模型可以將其調整以適應特定情況。比如,一個人可能在工作時使用更爲正式的語言,在與朋友交流時使用稍微隨意的語言。通過將其建模爲混合隱馬爾可夫模型,我們將這個人的語言表示爲各種口音的「混合」。

1. GMM-HMMs

2. 混合模型

3. 模型的貝葉斯分類器

2. 安裝

pomegranate 依賴項要求:

- Cython (only if building from source)- NumPy- SciPy- NetworkX- joblib

運行測試前,還要安裝 nose。

pip 安裝:

pip install pomegranate

conda 安裝:

conda install pomegranate

無需 C++編譯器,快速安裝 Windows 版本的 Wheels 已構建完畢。

3. 驗證安裝

設置已完成,現在需要檢查 pomegranate 是否可以使用:

$ python -c 'from pomegranate import *; print(NormalDistribution(0, 1).probability(0))'0.398942280402

如果你沒有看到如上輸出,或者遇到了其他錯誤,請提交問題至 https://github.com/jmschrei/pomegranate/issues。此外,若需要了解詳細的使用教程,請查看 tutorials 文件夾,裏面包含幾個關於如何有效使用 pomegranate 的教程。

論文:pomegranate: fast and flexible probabilistic modeling in python

論文地址:https://arxiv.org/pdf/1711.00137.pdf

摘要:本文展示了 pomegranate,一個 Python 下的概率模型開源機器學習包。概率建模包括大量使用概率分佈明確描述不確定性的方法。pomegranate 中實現的三種廣泛使用的概率模型爲通常混合模型、隱馬爾可夫模型和貝葉斯模型。pomegranate 的重心是從訓練模型的定義中抽象出其複雜性,允許用戶專注於爲自己的應用選擇合適的模型,而不用受到對底層算法理解不足的限制。pomegranate 的這一重心包括從數據集中收集充分的統計數據,作爲一種訓練模型的策略。該方法使用了很多有用的學習策略,如 out-of-core 學習、小批量學習和半監督學習,用戶無需考慮如何分割數據或修改算法,算法自己處理這些任務。pomegranate 用 Cython 構建以加速計算,同時內置多線程並行處理方法,pomegranate 可匹配甚至優於其他類似算法的實現。本文概覽了 pomegranate 的設計思路,以及如何使用簡單的代碼支持複雜的功能。


文章來源:機器之心