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 (Symbol 或 NDArray) – 第一个输入张量。
*args (Symbol 列表 或 NDArray 列表) – 额外的输入张量。
- 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, )