PYMC3: Как использовать math.switch для многомерных случайных величин - PullRequest
0 голосов
/ 13 июня 2018

В настоящее время я пытаюсь реализовать обнаружение точек изменения с помощью этого руководства: 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 позволяет переключаться только между одномерными случайными переменными, как мне обойти это?

...