我目前正在尝试使用本指南实施更改点检测: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语句只允许你在一维随机变量之间切换,我该如何解决这个问题呢?
答案 0 :(得分:0)
我无权访问您的模型的其余部分,但是遇到了同样的问题,可以通过在切换期间选择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])