时间序列

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

请参见 GP 示例 以了解用法示例。

抽象模型

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

继承自: pyro.nn.module.PyroModule

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

log_prob(targets)[source]

对数概率函数。

参数

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

返回 torch.Tensor

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

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

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

返回 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 成对数关系。

参数
  • 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 GP 的 GaussianHMM 分布。

参数

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

log_prob(targets)[source]
参数

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

返回 torch.Tensor

形状为 (obs_dim,) 的 1 维对数概率张量。

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

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

返回 torch.distributions.Normal

返回一个预测 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 成对数关系。

参数
  • nu (float) – Matern 核的阶数;可以是 0.5、1.5 或 2.5 之一。

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

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

  • num_gps (int) – 用于建模时间序列的独立 GP 数量。典型值可能在 \(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)[source]

获取对应于 LinearlyCoupledMaternGPGaussianHMM 分布。

参数

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

log_prob(targets)[source]
参数

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

返回 torch.Tensor

一个(标量)对数概率。

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

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

返回 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 核的单变量高斯过程。不同的输出维度之所以相关,是因为高斯过程由相关 Wiener 过程驱动;详细信息请参见参考文献 [1]。此外,如果 linearly_coupled 为 True,则通过线性混合实现额外的相关性,如 LinearlyCoupledMaternGP 中所述。假定目标在时间上均匀间隔。训练和推断的时间复杂度与时间序列长度 T 成对数关系。

参数
  • 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] “Dependent Matern Processes for Multivariate Time Series,” Alexander Vandenberg-Rodes, Babak Shahbaba.

get_dist(duration=None)[source]

获取对应于 GaussianHMM 分布,该分布对应于 DependentMaternGP

参数

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

log_prob(targets)[source]
参数

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

返回 torch.Tensor

一个(标量)对数概率。

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

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

返回 torch.distributions.MultivariateNormal

返回一个预测 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 成对数关系。

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

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

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

get_dist(duration=None)[source]

获取对应于 GenericLGSSMGaussianHMM 分布。

参数

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

log_prob(targets)[source]
参数

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

返回 torch.Tensor

一个(标量)对数概率。

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

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

返回 torch.distributions.MultivariateNormal

返回一个预测 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)[source]

继承自: 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 成对数关系。

参数
  • 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]

获取对应于 GaussianHMM 分布,该分布对应于 GenericLGSSMWithGPNoiseModel

参数

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

log_prob(targets)[source]
参数

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

返回 torch.Tensor

一个(标量)对数概率。

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

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

返回 torch.distributions.MultivariateNormal

返回一个预测 MultivariateNormal 分布,其批处理形状为 (N_timesteps,),事件形状为 (obs_dim,)

training: bool