gluonts.mx.distribution.lds 模块#

class gluonts.mx.distribution.lds.LDS(emission_coeff: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], transition_coeff: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], innovation_coeff: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], noise_std: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], residuals: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], prior_mean: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], prior_cov: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], latent_dim: int, output_dim: int, seq_length: int)[source]#

基类:gluonts.mx.distribution.distribution.Distribution

实现线性动力系统(LDS)作为一种分布。

LDS 由以下公式给出

\[\begin{split}z_t = A_t l_{t-1} + b_t + \epsilon_t \\ l_t = C_t l_{t-1} + g_t \nu\end{split}\]

其中

\[\begin{split}\epsilon_t = N(0, S_v) \\ \nu = N(0, 1)\end{split}\]

\(A_t\)\(C_t\)\(g_t\) 分别是发射、转移和创新系数。残差项记为 \(b_t\)

目标 \(z_t\) 可以是 \(d\) 维的,此时

\[A_t \in R^{d \times h}, b_t \in R^{d}, C_t \in R^{h \times h}, g_t \in R^{h}\]

其中 \(h\) 是潜在状态的维度。

参数
  • emission_coeff – 形状为 (batch_size, seq_length, obs_dim, latent_dim) 的张量

  • transition_coeff – 形状为 (batch_size, seq_length, latent_dim, latent_dim) 的张量

  • innovation_coeff – 形状为 (batch_size, seq_length, latent_dim) 的张量

  • noise_std – 形状为 (batch_size, seq_length, obs_dim) 的张量

  • residuals – 形状为 (batch_size, seq_length, obs_dim) 的张量

  • prior_mean – 形状为 (batch_size, latent_dim) 的张量

  • prior_cov – 形状为 (batch_size, latent_dim, latent_dim) 的张量

  • latent_dim – 潜在状态的维度

  • output_dim – 输出的维度

  • seq_length – 序列长度

  • F

property F#
arg_names: Tuple#
property batch_shape: Tuple#

分布所考虑的事件集合的布局。

从分布中调用 sample() 会产生形状为 batch_shape + event_shape 的张量,对此样本计算 log_prob(或更一般的 loss)会产生形状为 batch_shape 的张量。

此属性通常仅在 mx.ndarray 模式下可用,此时可以访问分布参数的形状。

property event_dim: int#

事件维度的数量,即 event_shape 元组的长度。

对于标量分布,此值为 0;对于向量分布,此值为 1;对于矩阵分布,此值为 2,依此类推。

property event_shape: Tuple#

分布所考虑的每个独立事件的形状。

例如,标量分布的 event_shape = (),向量分布的 event_shape = (d, ),其中 d 是向量的长度,矩阵分布的 event_shape = (d1, d2),依此类推。

从分布中调用 sample() 会产生形状为 batch_shape + event_shape 的张量。

此属性通常仅在 mx.ndarray 模式下可用,此时可以访问分布参数的形状。

kalman_filter(targets: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], observed: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Tuple[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], ...][source]#

根据观测执行卡尔曼滤波。

参数
  • targets – 观测值,形状为 (batch_size, seq_length, output_dim)

  • observed – 标志张量,指示哪些观测值是真实的 (1.0),哪些是缺失的 (0.0)

返回

  • 张量 – 对数概率,形状为 (batch_size, seq_length)

  • 张量 – p(l_T | l_{T-1}) 的均值,其中 T 是序列长度,形状为 (batch_size, latent_dim)

  • 张量 – p(l_T | l_{T-1}) 的协方差,其中 T 是序列长度,形状为 (batch_size, latent_dim, latent_dim)

log_prob(x: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], scale: Optional[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]] = None, observed: Optional[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]] = None)[source]#

计算观测值的对数概率。

此方法也返回系统的最终状态。

参数
  • x – 观测值,形状为 (batch_size, seq_length, output_dim)

  • scale – x 中每个序列的尺度,形状为 (batch_size, output_dim)

  • observed – 标志张量,指示哪些观测值是真实的 (1.0),哪些是缺失的 (0.0)

返回

  • 张量 – 对数概率,形状为 (batch_size, seq_length)

  • 张量 – 最终均值,形状为 (batch_size, latent_dim)

  • 张量 – 最终协方差,形状为 (batch_size, latent_dim, latent_dim)

sample(num_samples: Optional[int] = None, scale: Optional[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]] = None) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#

从 LDS 生成样本:p(z_1, z_2, ldots, z_{seq_length})。

参数
  • num_samples – 要生成的样本数量

  • scale – x 中每个序列的尺度,形状为 (batch_size, output_dim)

返回

样本,形状为 (num_samples, batch_size, seq_length, output_dim)

返回类型

张量

sample_marginals(num_samples: Optional[int] = None, scale: Optional[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]] = None) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#

从边际分布 p(z_t), t = 1, ldots, seq_length 生成样本。

参数
  • num_samples – 要生成的样本数量

  • scale – x 中每个序列的尺度,形状为 (batch_size, output_dim)

返回

样本,形状为 (num_samples, batch_size, seq_length, output_dim)

返回类型

张量

class gluonts.mx.distribution.lds.LDSArgsProj(output_dim: int, noise_std_bounds: gluonts.mx.distribution.lds.ParameterBounds, innovation_bounds: gluonts.mx.distribution.lds.ParameterBounds)[source]#

基类:mxnet.gluon.block.HybridBlock

hybrid_forward(F, x: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Tuple[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]][source]#

覆盖方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

class gluonts.mx.distribution.lds.ParameterBounds(lower, upper)[source]#

基类:object

gluonts.mx.distribution.lds.kalman_filter_step(F, target: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], prior_mean: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], prior_cov: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], emission_coeff: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], residual: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], noise_std: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], latent_dim: int, output_dim: int)[source]#

卡尔曼滤波的一个步骤。

此函数根据线性系统系数、先验状态(均值和方差)以及观测值计算滤波后的状态(均值和协方差)。

参数
  • F

  • target – 系统输出的观测值,形状为 (batch_size, output_dim)

  • prior_mean – 潜在状态的先验均值,形状为 (batch_size, latent_dim)

  • prior_cov – 潜在状态的先验协方差,形状为 (batch_size, latent_dim, latent_dim)

  • emission_coeff – 发射系数,形状为 (batch_size, output_dim, latent_dim)

  • residual – 残差分量,形状为 (batch_size, output_dim)

  • noise_std – 输出噪声的标准差,形状为 (batch_size, output_dim)

  • latent_dim – 潜在状态向量的维度

返回

  • 张量 – 滤波后的均值,形状为 (batch_size, latent_dim)

  • 张量 – 滤波后的协方差,形状为 (batch_size, latent_dim, latent_dim)

  • 张量 – 对数概率,形状为 (batch_size, )