Python上的图模型与概率建模工具包:pomegranate

近日,pomegranate 的作者宣布发布新版本 pomegranate v0.9.0。新版本为概率分布、k 均值、混合模型、隐马尔可夫模型、贝叶斯网络、朴素贝叶斯/贝叶斯分类器等模型提供模型拟合、结构化学习和推断过程的修正,并重点关注于处理数据缺失值。


新版重点关注于缺失值的处理,而我们通常的方法是仅从观察中收集充分数据,并忽略或设定相近的值来代替缺失值。但 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. 模型的贝叶斯分类器

安装

pomegranate 依赖项要求:

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

运行测试前,还要安装 nose。

pip 安装:

pip install pomegranate

conda 安装:

conda install pomegranate

无需 C++编译器,快速安装 Windows 版本的 Wheels 已构建完毕。

验证安装

设置已完成,现在需要检查 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 的设计思路,以及如何使用简单的代码支持复杂的功能。

入门工程概率图模型隐马尔可夫模型工具包
3
返回顶部