如何分解和可视化 Tensorflow 概率中的斜率分量

How to Decompose and Visualise Slope Component in Tensorflow Probability

我是 运行 tensorflow 2.1 和 tensorflow_probability 0.9。我已经拟合了一个具有季节性成分的结构时间序列模型。我正在使用 Tensorflow Probability Structural Time Series Probability 示例中的代码: Tensorflow Github.

在这个例子中有一个很好的分解可视化的情节:


# Get the distributions over component outputs from the posterior marginals on
# training data, and from the forecast model.
component_dists = sts.decompose_by_component(
    demand_model,
    observed_time_series=demand_training_data,
    parameter_samples=q_samples_demand_)

forecast_component_dists = sts.decompose_forecast_by_component(
    demand_model,
    forecast_dist=demand_forecast_dist,
    parameter_samples=q_samples_demand_)




demand_component_means_, demand_component_stddevs_ = (
    {k.name: c.mean() for k, c in component_dists.items()},
    {k.name: c.stddev() for k, c in component_dists.items()})

(
    demand_forecast_component_means_,
    demand_forecast_component_stddevs_
) = (
    {k.name: c.mean() for k, c in forecast_component_dists.items()},
    {k.name: c.stddev() for k, c in forecast_component_dists.items()}
    )

使用趋势成分时,是否可以分解和可视化两者:

trend/_level_scale & trend/_slope_scale

我尝试了很多排列来提取趋势组件的嵌套元素,但没有成功。

提前感谢您抽出时间。

我们没有为此编写单独的 STS 接口,但您可以通过直接查询基础状态 -space 模型来访问潜在状态(在本例中为水平和斜率)的后验其边际均值和协方差:

ssm = model.make_state_space_model(
        num_timesteps=num_timesteps,
        param_vals=parameter_samples)
posterior_means, posterior_covs = (
  ssm.posterior_marginals(observed_time_series))

您还应该能够通过 运行 ssm.posterior_sample(observed_time_series, num_samples) 从关节后部抽取样本。

目前从没有批量形状的模型中提取后验样本时似乎存在一个小故障 (Could not find valid device for node. Node:{{node Reshape}}):虽然我们修复了该问题,但应该可以添加一个人工批量维度作为解决方法: ssm.posterior_sample(observed_time_series[tf.newaxis, ...], num_samples).