如何使用 pymc 制作离散状态马尔可夫模型?

2024-01-03

我试图找出如何正确制作离散状态马尔可夫链模型pymc http://pymc-devs.github.io/pymc/index.html.

举个例子(查看nbviewer http://nbviewer.ipython.org/github/shpigi/pieces/blob/master/toyDbnExample.ipynb),让我们制作一条长度为 T=10 的链,其中马尔可夫状态是二元的,初始状态分布为 [0.2, 0.8],状态 1 中切换状态的概率为 0.01,而状态 2 中切换状态的概率为 0.5

import numpy as np
import pymc as pm
T = 10
prior0 = [0.2, 0.8]
transMat = [[0.99, 0.01], [0.5, 0.5]]

为了创建模型,我创建了一个状态变量数组和一个依赖于状态变量的转移概率数组(使用 pymc.Index 函数)

states = np.empty(T, dtype=object)
states[0] = pm.Categorical('state_0', prior0)
transPs = np.empty(T, dtype=object)
transPs[0] = pm.Index('trans_0', transMat, states[0])

for i in range(1, T):
    states[i] = pm.Categorical('state_%i' % i, transPs[i-1])
    transPs[i] = pm.Index('trans_%i' %i, transMat, states[i])

对模型进行采样表明,各州边际值是应有的值(与使用 Kevin Murphy 的 BNT 包在 Matlab 中构建的模型相比)

model = pm.MCMC([states, transPs])
model.sample(10000, 5000)
[np.mean(model.trace('state_%i' %i)[:]) for i in range(T)]    

打印出:

[-----------------100%-----------------] 10000 of 10000 complete in 7.5 sec

[0.80020000000000002,
 0.39839999999999998,
 0.20319999999999999,
 0.1118,
 0.064199999999999993,
 0.044600000000000001,
 0.033000000000000002,
 0.026200000000000001,
 0.024199999999999999,
 0.023800000000000002]

我的问题是 - 这似乎不是使用 pymc 构建马尔可夫链的最优雅的方式。是否有一种不需要确定性函数数组的更干净的方法?

我的目标是为更通用的动态贝叶斯网络编写一个基于 pymc 的包。


据我所知,您必须将每个时间步的分布编码为前一个时间步的确定性函数,因为这就是它的本质——参数中不涉及随机性,因为您在问题设置中定义了它们。但是,我认为您的问题可能更多的是寻找一种更直观的方式来表示模型。 一种替代方法是直接将时间步转换编码为前一时间步的函数。

from pymc import Bernoulli, MCMC

def generate_timesteps(N,p_init,p_trans):
    timesteps=np.empty(N,dtype=object)
    # A success denotes being in state 2, a failure being in state 1
    timesteps[0]=Bernoulli('T0',p_init)
    for i in xrange(1,N):
        # probability of being in state 1 at time step `i` given time step `i-1`
        p_i = p_trans[1]*timesteps[i-1]+p_trans[0]*(1-timesteps[i-1])
        timesteps[i] = Bernoulli('T%d'%i,p_i)
    return timesteps

timesteps = generate_timesteps(10,0.8,[0.001,0.5])
model = MCMC(timesteps)
model.sample(10000) # no burn in necessary since we're sampling directly from the distribution
[np.mean( model.trace(t).gettrace() ) for t in timesteps]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 pymc 制作离散状态马尔可夫模型? 的相关文章

随机推荐

  • Autofac:使用输入和输出类型参数解析变体类型

    这个问题是我之前问题的后续 Autofac 将多个逆变实现隐藏在一个组合后面 https stackoverflow com questions 7139054 autofac hiding multiple contravariant i
  • Windows 窗体 - 以透明度为背景的 PNG

    我正在开发一个小型个人项目 我需要创建一个具有阴影的非矩形窗口 更准确地说是一个圆形 尽管这可能会改变 如果表单将 png 设置为背景 我可以通过更改 Region 属性来获得圆形窗口 问题是窗口已对齐 PNG 的透明度不起作用 所以问题是
  • Picture.writeToStream() 未写出所有位图

    我在用着webview capturePicture 创建一个包含网页所有绘图对象的 Picture 对象 我可以使用以下方法成功将此 Picture 对象渲染为位图canvas drawPicture picture dst 没有问题 但
  • 在Java中将Key和Value添加到优先级队列并按Key排序

    我正在尝试获取字符串列表并将它们添加到带有键和值的优先级队列中 键是单词 值是单词的字符串值 然后我需要首先对具有最高字符串值的队列进行排序 优先级队列不允许我添加 2 个值 public static List
  • JavaScript,声明变量时语法混乱

    我最近在一本正在研究的 JavaScript 书中发现了以下代码行 var col top bottom 这是我第一次遇到一个变量似乎被赋予了三个变量 有人可以解释一下这行代码中发生了什么吗 它只是一个较短的版本 var col var t
  • Java 的 RAM 使用情况与任务管理器显示的不符

    我一直在玩Java的JVM 制作一个1024 3 基本上 1Gb 长度字节数组 我使用任务管理器 查看进程 和这个小片段测量了数组创建之前 之后以及数组被垃圾收集器销毁之后的 RAM 使用情况 public static void show
  • 使用wkhtmltopdf时如何处理ContentNotFoundError?

    有人可以告诉我如何解决以下问题吗 与以前的版本不同 wkhtmltopdf 没有传递代理信息 p 或 proxy 的选项 并且它也不使用系统 http proxy 和 https proxy env 变量 即使我为 libssl so 和
  • 应避免使用 flatDirs,因为它不支持任何元数据格式

    在 Android Studio 中构建时 我看到以下警告 应避免使用 flatDirs 因为它不支持任何元数据格式 我正在与本地打包的 aar 集成libs目录 是否有另一种集成方法 无需将以下有问题的块添加到我的build gradle
  • if comment.name == user 无法正常工作

    我希望用户能够删除他们写的评论 不幸的是 我无法让 if 语句发挥作用 if comment name user a href delete this comment a endif 所以我可以看到 user 和 comment name
  • Cocoa 脚本:接受并返回 NSData

    为了支持我的可编写脚本的 Mac 应用程序中的二进制数据交换 我希望能够使用 AS ObjC 桥接器以 NSData 形式接收和传递数据 如果可能的话 例如 我喜欢在 AppleScript 中实现以下代码 use framework Fo
  • 直接链接到 SWF 有哪些缺点?

    通常 Flash 和 Flex 应用程序使用以下组合嵌入到 HTML 中 object and embed标签 或更常见的是使用 JavaScript 但是 如果您直接链接到 SWF 文件 它将在浏览器窗口中打开 并且无需查看地址栏 您就无
  • 使用 Serde 反序列化时如何忽略额外的元组项? (“尾随字符”错误)

    Serde 在反序列化为常规结构时会忽略未知的命名字段 当反序列化为元组结构 例如来自异构 JSON 数组 时 如何同样忽略额外的项目 例如 此代码忽略额外的 c 字段就好了 derive Serialize Deserialize Deb
  • 当我尝试发出目标代码时,为什么 LLVM 出现段错误?

    我试图遵循有关编译器实现的 LLVM 教程 但当我尝试发出目标代码时 我的代码出现段错误 这是一个尝试编译函数的最小示例func 为了让事情变得简单 func是一个不执行任何操作的函数 include
  • 页面加载时显示进度轮

    当用户等待时正在进行大量数据库和第 3 方 cURL 查询时 我需要一个进度轮来显示 进度轮应该立即自行显示 还是应该在页面模板 而不是内容 加载后显示它 我是否应该显示进度轮 直到页面的 HTML javascript 加载完成 或者 P
  • 如何转换(旋转)已经存在的 CALayer/动画?

    我已将 CALayer 添加到我的应用程序的 UIView 中 CATransition animation CATransition animation animation setDelegate self animation setDu
  • 用于连续语音识别的 OS X Yosemite (10.10) API

    OSX 现在已经为多个版本内置了连续语音识别功能 现在情况非常好 OSX 10 10 是否有用于此连续语音识别引擎的 API 谷歌搜索告诉我大约 2009 年只有 NSSpeechRecogniser OSX 上的 MS SAPI sdk
  • CSS 文本溢出省略号在 Grid / Flex 中不起作用

    我无法得到text overflow省略号在 CSS 网格中工作 文本被截断 但省略号点不显示 这是我的CSS grid display grid margin auto width 90 grid template columns 2fr
  • Django:按日期过滤日期时间而忽略时间

    我正在尝试过滤Matches 安排在某一天 我不能只这样做 match queryset filter start date 因为它也会按时间过滤 但我可以这样做 match queryset filter start year a dat
  • 在诗歌项目上安装 GDAL

    我在 Poetry 管理的虚拟环境中安装 GDAL 时遇到问题 在 Ubuntu 18 04 发行版上工作 我已经发现的是 这个问题 https github com python poetry poetry issues 845在诗歌 g
  • 如何使用 pymc 制作离散状态马尔可夫模型?

    我试图找出如何正确制作离散状态马尔可夫链模型pymc http pymc devs github io pymc index html 举个例子 查看nbviewer http nbviewer ipython org github shp