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