python - 如何将 Tensorflow 概率结构化时间序列模型组件的 sts.LinearRegression 替换为非线性模型

标签 python tensorflow time-series forecasting tensorflow-probability

我正在创建一个具有外部可控功能的时间序列预测模型,类似于 https://medium.com/tensorflow/structural-time-series-modeling-in-tensorflow-probability-344edac24083 中的“预测电力需求”示例。 。为了对外部因素的影响进行建模,我使用 sts.LinearRegression() 作为模型的组件,但这些外部因素本质上是非常非线性的,它会在我的模型中导致不需要的负面预测。

我尝试在 TFP STS 之外创建(更简单的)预测,发现对于这些外部功能,RandomForestRegressor 比 LinearRegressor 效果更好。我想做的是将 sts.LinearRegression() 替换为 sts.RandomForestRegressor(),但这在 sts 库中不可用。事实上,sts 库中几乎没有任何可用选项: https://www.tensorflow.org/probability/api_docs/python/tfp/sts/LinearRegression

我还尝试将目标变量转换为日志形式,但是有许多零实例(对于日志来说是 inf),并且这并不是一个有用的转换。

我的 TFP STS 模型架构如下所示:

def build_model(observed_time_series):

season_effect = sts.Seasonal(
                num_seasons = 4, num_steps_per_season = 13, observed_time_series = observed_time_series,
                name = 'season_effect')
marketing_effect = sts.LinearRegression(
                design_matrix = tf.stack([recent_publicity - np.mean(recent_publicity),
                active_ad - np.mean(active_ad)], axis = -1),
                name = 'marketing_effect')
autoregressive = sts.Autoregressive(order=1,
                observed_time_series = observed_time_series,
                name = 'autoregressive')
model = sts.Sum([season_effect,
                 marketing_effect,
                 autoregressive],
                 observed_time_series = observed_time_series)
return model

我想将模型的“marketing_effect”组件更改为非线性的。

我唯一的选择是克隆 TFP STS 库并创建自定义函数来使用随机森林回归器之类的东西处理非线性数据吗?有人知道更好的选择吗?

最佳答案

我不熟悉随机森林在 sts 模型中的使用。你能指出一个存在这种情况的系统吗? tfp.sts 的窍门在于,所有的数学运算都很好且易于分析,因为一切都呈边际高斯分布。如果我们能做到这一点,我认为我们绝对愿意引入其他模型。

关于python - 如何将 Tensorflow 概率结构化时间序列模型组件的 sts.LinearRegression 替换为非线性模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57626828/

相关文章:

python - 我可以在 Keras 中分步训练模型吗?

R、时间序列、Arima 模型、预测、每日数据

python - 如何使用 PYTHON 遍历目录中的文件并将 INFO 插入 MySQL 数据库

python从xml中提取数据并保存到excel

python - 使用 plotnine 保存高分辨率图像

tensorflow - tensorflow 中CNN的内置内核是什么?

python - mypy:定义动态字典中特定键的类型

python - tensorflow 中不同范围的子网权重共享

python - 在 Pandas 中捕捉时间

r - 合并两个不同时间粒度的时间序列