能否让我知道是否可以使用当前的statsmodels SARIMAX代码逐步应用卡尔曼滤波器(以使其更快)?
这是我的意思。想象一下,一个人使用一个[iFitBegin, iFitEnd]
中具有索引的数据来拟合SARIMAX模型(#1),然后一个人想要使用这样的模型来对[iFitEnd+1, iDataEnd]
中具有索引的数据进行预测。要在当前代码中做到这一点,似乎必须使用索引为[iFitBegin, iDataEnd]
的数据创建一个新的SARIMAX模型(#2),并使用从模型#1提取的参数在模型#2上应用卡尔曼滤波器。之后,可以要求模型2进行预测。但是,如果对流数据进行预测(新数据一次到达一个数据点),则对于大型模型而言,这样做的计算量很大,因为每次都必须重做所有Kalman滤波, iFitBegin
到索引iPred
(需要进行预测的索引)。在数学上,递增地应用卡尔曼滤波器,即如果对索引iPred
进行卡尔曼滤波,则要对索引iPred+1
进行滤波,一个人仅需采取iPred
的状态,并且仅在iPred+1
上使用一个新的数据点来应用卡尔曼滤波器的一个步骤,因此如果也可以在代码中递增地执行它,那就太好了。
请问我是否可以在当前statsmodels SARIMAX实现中进行这种增量式卡尔曼滤波(即一次更新一个状态)?
答案 0 :(得分:1)
现在可以在Statsmodels的开发版本(即Github的master分支)中使用,并且将在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()
请注意,这不会不重新估算参数,但是,您可以扩展当前结果以容纳一组更新的观测值,而不必在{ {1}}示例。
有关其他详细信息,请参见https://www.statsmodels.org/devel/examples/notebooks/generated/statespace_forecasting.html。