python - PYMC3:如何将 math.switch 用于高维随机变量
问题描述
我目前正在尝试使用本指南实现变更点检测:http: //nbviewer.jupyter.org/github/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Chapter1_Introduction/Ch1_Introduction_PyMC3.ipynb
它使用 switch 语句来决定变化点之前和之后的分布参数。
lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2)
我也试图找到一个变化点,但使用假定来自多元分布的数据。
这是我的代码:
tau = pm.Uniform("tau_", lower = x_data[0], upper = x_data[-1])
mus_1 = pm.Uniform("mus1", lower = min(y_data[0]), upper = max(y_data[0]), shape = 10)
mus_2 = pm.Uniform("mus2", lower = min(y_data[0]), upper = max(y_data[0]), shape = 10)
mus_ = pm.math.switch(tau > x_data, mus_1, mus_2)
我将形状设为 10,假设分布是具有 10 个变量的多元正态分布。
我假设 switch 语句会将形状 10 随机变量元素明智地分配给 x_data(7919 点)
但是,我收到以下错误:
ValueError: Input dimension mis-match. (input[0].shape[0] = 7919, input[1].shape[0] = 10)
似乎 switch 语句只允许您在一维随机变量之间切换,我该如何解决这个问题?
解决方案
我无权访问您的模型的其余部分,但我遇到了同样的问题,并且能够通过在切换功能期间选择mus1
和mus2
索引来开发解决方法。所以假设你有一些索引数组idx
,代码如下所示,
tau = pm.Uniform("tau_", lower = x_data[0], upper = x_data[-1])
mus_1 = pm.Uniform("mus1", lower = min(y_data[0]), upper = max(y_data[0]), shape = 10)
mus_2 = pm.Uniform("mus2", lower = min(y_data[0]), upper = max(y_data[0]), shape = 10)
mus_ = pm.math.switch(tau > x_data, mus_1[idx], mus_2[idx])
推荐阅读
- java - 为什么在尝试将 PUT 请求从 angular5 发送到 spring-boot 时我得到未经授权?
- jquery - 从 json 数据动态生成 html 表
- php - 无法添加或更新子行:外键约束使表 empleado 和 contrato 失败
- c++ - Prims 算法:运行时错误 (C++)
- python - Python中的合并循环和打印语句
- java - 加密结果仅是字母数字
- javascript - 从 Mongo Query 返回的数据的错误处理
- model - 我在哪里可以找到 EMFText 文档或示例?
- maven - 如何使用 Jenkins 管道脚本将多个工件(.zip)上传到 arifactory 中的不同目标
- data-binding - SAPUI5 OData 绑定到表