时间序列

pyro.contrib.timeseries 模块提供了一系列用于预测应用的贝叶斯时间序列模型。

查看GP示例以了解示例用法。

抽象模型

class TimeSeriesModel(name: str = '')[source]

基础类:pyro.nn.module.PyroModule

单变量和多变量时间序列模型的基类。

log_prob(targets)[来源]

对数概率函数。

Parameters

targets (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数 targets 的维度

Returns torch.Tensor

对于输出维度相关的适当多元时间序列模型的情况,返回一个0维的对数概率;否则,对于批处理的一元时间序列模型,返回一个1维的对数概率张量。

forecast(targets, dts)[source]
Parameters
  • 目标 (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数目标的维度。这些代表用于进行预测的训练数据。

  • dts (torch.Tensor) – 一个一维张量,表示预测未来的时间,其中零对应于最终目标 targets[-1] 的时间。

Returns torch.distributions.Distribution

返回一个预测分布,其批次形状为 (S,),事件形状为 (obs_dim,),其中 Sdts 的大小。也就是说,生成的预测分布不编码 dts 中不同时间之间的相关性。

get_dist()[source]

获取一个与这个时间序列模型相对应的Distribution对象。通常这是一个GaussianHMM

training: bool

高斯过程

class IndependentMaternGP(nu=1.5, dt=1.0, obs_dim=1, length_scale_init=None, kernel_scale_init=None, obs_noise_scale_init=None)[source]

基础类:pyro.contrib.timeseries.base.TimeSeriesModel

一个时间序列模型,其中每个输出维度都使用具有Matern核的单变量高斯过程独立建模。假设目标在时间上是均匀间隔的。训练和推理在时间序列T的长度上是对数的。

Parameters
  • nu (float) – Matern核的顺序;取值为0.5、1.5或2.5之一。

  • dt (float) – 时间序列中相邻观测值之间的时间间隔。

  • obs_dim (int) – 每个时间步目标的维度。

  • length_scale_init (torch.Tensor) – 可选的核长度尺度初始值,以obs_dim维度的张量形式给出

  • kernel_scale_init (torch.Tensor) – 可选的核尺度初始值,以obs_dim维张量的形式给出

  • obs_noise_scale_init (torch.Tensor) – 观测噪声尺度的可选初始值,以obs_dim维度的张量形式给出

get_dist(duration=None)[source]

获取与obs_dim个独立的Matern GPs对应的GaussianHMM分布。

Parameters

duration (int) – 时间轴的可选大小 event_shape[0]。 当从参数未沿时间轴扩展的齐次HMMs中采样时,这是必需的。

log_prob(targets)[source]
Parameters

targets (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数 targets 的维度

Returns torch.Tensor

一个形状为(obs_dim,)的对数概率的一维张量

forecast(targets, dts)[来源]
Parameters
  • 目标 (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数目标的维度。这些代表用于进行预测的训练数据。

  • dts (torch.Tensor) – 一个一维张量,表示预测未来的时间,其中零对应于最终目标 targets[-1] 的时间。

Returns torch.distributions.Normal

返回一个预测的正态分布,其批次形状为 (S,),事件形状为 (obs_dim,),其中 Sdts 的大小。

training: bool
class LinearlyCoupledMaternGP(nu=1.5, dt=1.0, obs_dim=2, num_gps=1, length_scale_init=None, kernel_scale_init=None, obs_noise_scale_init=None)[source]

基础类:pyro.contrib.timeseries.base.TimeSeriesModel

一个时间序列模型,其中每个输出维度被建模为具有Matern核的共享单变量高斯过程的线性组合。

更详细地说,生成过程是:

\(y_i(t) = \sum_j A_{ij} f_j(t) + \epsilon_i(t)\)

目标 \(y_i\) 被假定为在时间上均匀分布。训练和推理在时间序列 T 的长度上是对数的。

Parameters
  • nu (float) – Matern核的顺序;取值为0.5、1.5或2.5之一。

  • dt (float) – 时间序列中相邻观测值之间的时间间隔。

  • obs_dim (int) – 每个时间步目标的维度。

  • num_gps (int) – 用于建模时间序列的独立高斯过程的数量。 典型值可能是 \(N_{\rm gp} \in [\frac{D_{\rm obs}}{2}, D_{\rm obs}]\)

  • length_scale_init (torch.Tensor) – 可选的核长度尺度初始值,以num_gps维张量的形式给出

  • kernel_scale_init (torch.Tensor) – 可选的核尺度初始值,以num_gps维张量的形式给出

  • obs_noise_scale_init (torch.Tensor) – 观测噪声尺度的可选初始值,以obs_dim维度的张量形式给出

get_dist(duration=None)[来源]

获取与LinearlyCoupledMaternGP对应的GaussianHMM分布。

Parameters

duration (int) – 时间轴的可选大小 event_shape[0]。 当从参数未沿时间轴扩展的齐次HMMs中采样时,这是必需的。

log_prob(targets)[源代码]
Parameters

targets (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数 targets 的维度

Returns torch.Tensor

一个(标量)对数概率

forecast(targets, dts)[source]
Parameters
  • 目标 (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数目标的维度。这些代表用于进行预测的训练数据。

  • dts (torch.Tensor) – 一个一维张量,表示预测未来的时间,其中零对应于最终目标 targets[-1] 的时间。

Returns torch.distributions.MultivariateNormal

返回一个预测的MultivariateNormal分布,其批次形状为(S,),事件形状为(obs_dim,),其中Sdts的大小。

training: bool
class DependentMaternGP(nu=1.5, dt=1.0, obs_dim=1, linearly_coupled=False, length_scale_init=None, obs_noise_scale_init=None)[source]

基础类:pyro.contrib.timeseries.base.TimeSeriesModel

一个时间序列模型,其中每个输出维度都被建模为具有Matern核的单变量高斯过程。由于高斯过程由相关的维纳过程驱动,不同的输出维度变得相关;详情请参见参考文献[1]。此外,如果linearly_coupled为True,则通过线性混合实现额外的相关性,如LinearlyCoupledMaternGP所示。假设目标在时间上是均匀分布的。训练和推理的时间复杂度是时间序列长度T的对数。

Parameters
  • nu (float) – Matern核的阶数;必须为1.5。

  • dt (float) – 时间序列中相邻观测值之间的时间间隔。

  • obs_dim (int) – 每个时间步目标的维度。

  • linearly_coupled (bool) – 是否在似然中线性混合各种高斯过程。 默认为 False。

  • length_scale_init (torch.Tensor) – 可选的核长度尺度初始值,以obs_dim维度的张量形式给出

  • obs_noise_scale_init (torch.Tensor) – 观测噪声尺度的可选初始值,以obs_dim维度的张量形式给出

参考文献 [1] “多元时间序列的依赖Matern过程,” Alexander Vandenberg-Rodes, Babak Shahbaba.

get_dist(duration=None)[source]

获取与DependentMaternGP对应的GaussianHMM分布

Parameters

duration (int) – 时间轴的可选大小 event_shape[0]。 当从参数未沿时间轴扩展的齐次HMMs中采样时,这是必需的。

log_prob(targets)[source]
Parameters

targets (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数 targets 的维度

Returns torch.Tensor

一个(标量)对数概率

training: bool
forecast(targets, dts)[source]
Parameters
  • 目标 (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数目标的维度。这些代表用于进行预测的训练数据。

  • dts (torch.Tensor) – 一个一维张量,表示预测未来的时间,其中零对应于最终目标 targets[-1] 的时间。

Returns torch.distributions.MultivariateNormal

返回一个预测的多元正态分布,其批次形状为 (S,),事件形状为 (obs_dim,),其中 Sdts 的大小。

线性高斯状态空间模型

class GenericLGSSM(obs_dim=1, state_dim=2, obs_noise_scale_init=None, learnable_observation_loc=False)[source]

基础类:pyro.contrib.timeseries.base.TimeSeriesModel

一个通用的线性高斯状态空间模型,使用任意时间不变的转移和观测动态进行参数化。目标(隐含地)假设在时间上是均匀分布的。训练和推理在时间序列T的长度上是对数的。

Parameters
  • obs_dim (int) – 每个时间步目标的维度。

  • state_dim (int) – 每个时间步的潜在状态维度。

  • learnable_observation_loc (bool) – 是否应该学习观测模型的均值; 默认为 False。

get_dist(duration=None)[source]

获取与GenericLGSSM对应的GaussianHMM分布。

Parameters

duration (int) – 时间轴的可选大小 event_shape[0]。 当从参数未沿时间轴扩展的齐次HMMs中采样时,这是必需的。

log_prob(targets)[source]
Parameters

targets (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数 targets 的维度

Returns torch.Tensor

一个(标量)对数概率。

forecast(targets, N_timesteps)[source]
Parameters
  • 目标 (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数目标的维度。这些代表用于进行预测的训练数据。

  • N_timesteps (int) – 从最终目标 targets[-1] 预测未来的时间步数。

Returns torch.distributions.MultivariateNormal

返回一个预测的多变量正态分布 其批次形状为 (N_timesteps,) 且事件形状为 (obs_dim,)

training: bool
class GenericLGSSMWithGPNoiseModel(obs_dim=1, state_dim=2, nu=1.5, obs_noise_scale_init=None, length_scale_init=None, kernel_scale_init=None, learnable_observation_loc=False)[源代码]

基础类:pyro.contrib.timeseries.base.TimeSeriesModel

一个通用的线性高斯状态空间模型,使用任意时间不变的转移和观测动态参数化,并为每个输出维度分别使用高斯过程噪声模型。更详细地说,生成过程如下:

\(y_i(t) = \sum_j A_{ij} z_j(t) + f_i(t) + \epsilon_i(t)\)

其中潜在变量 \({\bf z}(t)\) 遵循通用的时间不变线性高斯动态,而 \(f_i(t)\) 是具有Matern核的高斯过程。

目标(隐式)假设在时间上是均匀分布的。特别是,连续时间GP动态的时间步长\(dt=1.0\)对应于\({\bf z}\)空间动态的单个离散步骤。训练和推理在时间序列T的长度上是对数的。

Parameters
  • obs_dim (int) – 每个时间步目标的维度。

  • state_dim (int) – 每个时间步的潜在状态 \({\bf z}\) 的维度。

  • nu (float) – Matern核的顺序;取值为0.5、1.5或2.5之一。

  • length_scale_init (torch.Tensor) – 可选的核长度尺度初始值,以obs_dim维度的张量形式给出

  • kernel_scale_init (torch.Tensor) – 可选的核尺度初始值,以obs_dim维张量的形式给出

  • obs_noise_scale_init (torch.Tensor) – 观测噪声尺度的可选初始值,以obs_dim维度的张量形式给出

  • learnable_observation_loc (bool) – 是否应该学习观测模型的均值; 默认为 False。

get_dist(duration=None)[source]

获取与GenericLGSSMWithGPNoiseModel对应的GaussianHMM分布。

Parameters

duration (int) – 时间轴的可选大小 event_shape[0]。 当从参数未沿时间轴扩展的齐次HMMs中采样时,这是必需的。

log_prob(targets)[来源]
Parameters

targets (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数 targets 的维度

Returns torch.Tensor

一个(标量)对数概率。

forecast(targets, N_timesteps)[来源]
Parameters
  • 目标 (torch.Tensor) – 一个形状为 (T, obs_dim) 的二维实数目标张量,其中 T 是时间序列的长度,obs_dim 是每个时间步的实数目标的维度。这些代表用于进行预测的训练数据。

  • N_timesteps (int) – 从最终目标 targets[-1] 预测未来的时间步数。

Returns torch.distributions.MultivariateNormal

返回一个预测的多变量正态分布 其批次形状为 (N_timesteps,) 且事件形状为 (obs_dim,)

training: bool