Использование GPMC для прогнозирования временных рядов - PullRequest
0 голосов
/ 27 сентября 2019

Я новичок в гауссовских процессах и gpflow и хотел бы использовать их для прогнозирования временных рядов, которые демонстрируют ежедневную сезонность и являются весьма нестабильными.

Моя идея состояла в том, чтобы начать с одного ядра (периодического), используйте информацию, которую я уже имею (периодичность), а затем перейдем к комбинации различных ядер.Это работало достаточно хорошо для модели GPR, но результаты были плохими для модели GPMC.

В основном я действовал, как показано здесь: https://gpflow.readthedocs.io/en/stable/notebooks/mcmc.html.

После оптимизации и выборки

m.compile()
o = gpflow.train.AdamOptimizer(0.01)
o.minimize(m, maxiter=15) # start near MAP

s = gpflow.train.HMC()
samples = s.sample(m, 100, epsilon=0.12, lmax=20, lmin=5, thin=5, logprobs=False)#, verbose=True)

Я использовал

m.predict_y(X_test)

, чтобы получить предсказанные значения y.Нужно ли вместо этого использоватьgnatt_f () или Forext_f_samples () и сказать gpflow использовать гиперпараметры, которые были оптимизированы во время процедуры HMC (я тоже новичок в этом), или об этом уже позаботились, когда используете pregnet_y?

Еще одна небольшая проблема: np.random.seed и tf.random.set_random_seed, похоже, не влияют на воспроизводимость результатов, у кого-нибудь еще есть эта проблема?

1 Ответ

0 голосов
/ 28 сентября 2019

Вы уже просматривали ноутбук MCMC в руководствах по GPflow ?Это также должно ответить на ваш вопрос - если это не так, то это может быть полезно, если вы скажете, как он терпит неудачу.

Параметры в классе модели могут содержать только одно значение за раз.Это хорошо для точечных оценок (или вариационного вывода, где мы описываем распределение по его среднему значению и (со) дисперсии отдельно), но выборка по методу Монте-Карло по своей природе означает, что у вас будет много выборок для каждого значения параметра (длякласс GPMC, это как гиперпараметры ядра, так и переменная, описывающая значение GP в каждой точке данных - или вызывающая переменная для SGPMC - в отбеленном представлении), «оптимизированное значение гиперпараметра» отсутствует.

Чтобы на самом деле прогнозировать в модели Монте-Карло, необходимо вызвать метод прогнозирования для каждой выборки значений параметров.GPflow предоставляет своим моделям полезный метод, чтобы сделать это проще:

    Fpred, Ypred = [], []

    for i, s in samples[burn::thin].iterrows():  # also possible as arguments to hmc.sample()
        feed_dict = m.sample_feed_dict(s)
        Ypred.append(m.predict_y(xx, feed_dict=feed_dict)[0])
        Fpred.append(m.predict_f_samples(xx, 1, feed_dict=feed_dict).squeeze())

(из https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/advanced/multiclass_classification.py)

Ваш "фактический" прогноз - это распределение, определяемое прогнозом для каждой из выборок.

Уже есть вопросов о стековом потоке, касающихся начального числа в графах тензорного потока .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...