时间序列¶
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,)
,其中S
是dts
的大小。也就是说,得到的预测分布不包含dts
中不同时间点之间的相关性。
- get_dist()[source]¶
获取对应于此时间序列模型的
Distribution
对象。这通常是GaussianHMM
。
高斯过程¶
- 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,)
,其中S
是dts
的大小。
- 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]¶
获取对应于
LinearlyCoupledMaternGP
的GaussianHMM
分布。- 参数
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,)
,其中S
是dts
的大小。
- 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
一个(标量)对数概率。
- 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,)
,其中S
是dts
的大小。
线性高斯状态空间模型¶
- class GenericLGSSM(obs_dim=1, state_dim=2, obs_noise_scale_init=None, learnable_observation_loc=False)[source]¶
继承自:
pyro.contrib.timeseries.base.TimeSeriesModel
一个泛型线性高斯状态空间模型,使用任意时不变的转移和观测动力学进行参数化。假定目标在时间上(隐式地)均匀间隔。训练和推断的时间复杂度与时间序列长度 T 成对数关系。
- 参数
- get_dist(duration=None)[source]¶
获取对应于
GenericLGSSM
的GaussianHMM
分布。- 参数
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,)
。
- 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,)
。