Как реализовать интегрированный компонент тренда случайного блуждания в вероятности тензорного потока - PullRequest
0 голосов
/ 12 февраля 2020

Я использую tenorflow 2.1 и tenorflow_probability 0.9. Я применил Структурную модель временных рядов с сезонным компонентом.

I * sh для реализации интегрированного случайного блуждания с целью сглаживания компонента тренда в соответствии с анализом временных рядов методами пространства состояний: второе издание , Дурбин и Купман. Интегрированное случайное блуждание достигается путем установки дисперсии компонента уровня равной 0.

Возможно ли реализовать это ограничение в вероятности Tensorflow?

В дополнение к этому в Durbin & Koopman случайные блуждания более высокого порядка обсуждается. Может ли это быть реализовано?

Заранее спасибо за ваше время.

1 Ответ

0 голосов
/ 15 февраля 2020

Если я правильно понимаю, интегрированное случайное блуждание - это всего лишь частный случай LocalLinearTrend, в котором уровень просто интегрирует случайно меняющийся компонент наклона (ie у него нет независимого источника вариаций). Вы можете исправить это, создав подкласс LocalLinearTrend и исправив level_scale = 0. в моделях, которые он строит:

class IntegratedRandomWalk(sts.LocalLinearTrend):

  def __init__(self,
               slope_scale_prior=None,
               initial_slope_prior=None,
               observed_time_series=None,
               name=None):
    super(IntegratedRandomWalk, self).__init__(
      slope_scale_prior=slope_scale_prior,
      initial_slope_prior=initial_slope_prior,
      observed_time_series=observed_time_series,
      name=None)
    # Remove 'level_scale' parameter from the model.
    del self._parameters[0]

  def _make_state_space_model(self,
                              num_timesteps,
                              param_map,
                              initial_state_prior=None,
                              initial_step=0):

    # Fix `level_scale` to zero, so that the level
    # cannot change except by integrating the
    # slope.
    param_map['level_scale'] = 0.

    return super(IntegratedRandomWalk, self)._make_state_space_model(
      num_timesteps=num_timesteps,
      param_map=param_map,
      initial_state_prior=initial_state_prior,
      initial_step=initial_step)

(это было бы математически эквивалентно построению LocalLinearTrend с level_scale_prior, сконцентрированным в нуле, но это ограничение затрудняет вывод, поэтому обычно лучше просто игнорировать или полностью удалить параметр, как я сделал здесь).

Под случайными блужданиями высшего порядка вы подразумеваете авторегрессионные модели? Если это так, sts.Autoregressive может иметь значение.

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