【问题标题】:SARIMAX: incremental Kalman filterSARIMAX:增量卡尔曼滤波器
【发布时间】:2019-09-01 01:39:03
【问题描述】:

能否请您告诉我是否可以使用当前的 statsmodels SARIMAX 代码逐步应用卡尔曼滤波器(以使其更快)?

这就是我的意思。想象一下,一个人使用索引为[iFitBegin, iFitEnd] 的数据拟合 SARIMAX 模型(#1),然后想使用这样的模型对索引为[iFitEnd+1, iDataEnd] 的数据进行预测。要在当前代码中做到这一点,似乎必须使用具有[iFitBegin, iDataEnd] 索引的数据创建一个新的 SARIMAX 模型(#2),并在模型#2 上应用卡尔曼滤波器,参数取自模型#1。之后,可以从模型 #2 请求预测。但是,如果对流数据(新数据一次到达一个数据点)进行预测,则计算成本很高(对于大型模型),因为每次都必须从iFitBegin 到索引 iPred(需要预测的那个)。在数学上,卡尔曼滤波器是增量应用的,即如果卡尔曼滤波完成到索引iPred,那么要进行滤波到索引iPred+1,只需要采用iPred的状态并且只应用卡尔曼滤波器的一步使用iPred+1 的单个新数据点,因此如果也可以在代码中以增量方式执行此操作,那就太好了。

您能否告诉我在当前的 statsmodels SARIMAX 实现中是否有办法进行这种增量卡尔曼滤波(即一次更新一个状态)?

【问题讨论】:

    标签: python statsmodels kalman-filter arima


    【解决方案1】:

    现在可以在 Statsmodels 的开发版本中使用(即在 Github 的主分支中),并将在 0.11 版本中使用(不过,还没有该版本的时间表)。

    基本上,您将能够执行以下操作:

    training_mod = sm.tsa.SARIMAX(training_endog, order=(1, 0, 0))
    training_res = training_mod.fit()
    
    # The `extend` call will only apply the Kalman filter to the
    # updated_endog
    extended_res = training_res.extend(updated_endog)
    fcasts = extended_res.forecast()
    

    请注意,这将不会重新估计参数,但它允许您扩展当前结果以适应更新的观察集,而无需在 @ 上重新运行卡尔曼滤波器987654323@样品。

    有关更多详细信息,请参阅https://www.statsmodels.org/devel/examples/notebooks/generated/statespace_forecasting.html

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多