将保存的参数(Pandas 系列)加载到 Statsmodels state-space 模型中
Loading saved params (a Pandas series) into a Statsmodels state-space model
我正在使用优秀的 python 包 statsmodels
构建一个动态因子模型,我想 pickle 一个估计的参数向量,这样我可以稍后再次构建模型,并加载那些参数进去。 (C.f,Chad Fulton 制作的笔记本:https://github.com/ChadFulton/tsa-notebooks/blob/master/dfm_coincident.ipynb.)
在下面的代码块中,使用 mod.fit()
(使用 Powell 算法)估计初始参数,然后返回给 mod.fit()
以使用以下方法完成估计(使用 EM 算法)初始参数为 initial_res.params
。 (后者是Pandas系列。)
mod = sm.tsa.DynamicFactor(endog, k_factors=1, factor_order=2, error_order=2)
initial_res = mod.fit(method='powell', disp=False)
res = mod.fit(initial_res.params)
我想 pickle res.params
(同样,一个小的 Pandas 系列,以及一个小的磁盘占用空间)。然后再次从头开始构建模型,并将我保存的参数加载到其中,而无需重新估计模型。有人知道怎么做吗?
我看到的示例建议对结果对象进行 pickling res
,但这可以节省很多。从头开始构建它非常简单,但估计需要一段时间。从保存的最优参数开始估计可能更快;但是,这仍然很业余,对吧?
TIA,
德鲁
您可以在任何状态 space 模型上使用 smooth
方法从特定参数构造结果对象。在您的示例中:
mod = sm.tsa.DynamicFactor(endog, k_factors=1, factor_order=2, error_order=2)
initial_res = mod.fit(method='powell', disp=False)
res = mod.fit(initial_res.params)
res.params.to_csv(...)
# ...later...
params = pd.read_csv(...)
res = mod.smooth(params)
我正在使用优秀的 python 包 statsmodels
构建一个动态因子模型,我想 pickle 一个估计的参数向量,这样我可以稍后再次构建模型,并加载那些参数进去。 (C.f,Chad Fulton 制作的笔记本:https://github.com/ChadFulton/tsa-notebooks/blob/master/dfm_coincident.ipynb.)
在下面的代码块中,使用 mod.fit()
(使用 Powell 算法)估计初始参数,然后返回给 mod.fit()
以使用以下方法完成估计(使用 EM 算法)初始参数为 initial_res.params
。 (后者是Pandas系列。)
mod = sm.tsa.DynamicFactor(endog, k_factors=1, factor_order=2, error_order=2)
initial_res = mod.fit(method='powell', disp=False)
res = mod.fit(initial_res.params)
我想 pickle res.params
(同样,一个小的 Pandas 系列,以及一个小的磁盘占用空间)。然后再次从头开始构建模型,并将我保存的参数加载到其中,而无需重新估计模型。有人知道怎么做吗?
我看到的示例建议对结果对象进行 pickling res
,但这可以节省很多。从头开始构建它非常简单,但估计需要一段时间。从保存的最优参数开始估计可能更快;但是,这仍然很业余,对吧?
TIA, 德鲁
您可以在任何状态 space 模型上使用 smooth
方法从特定参数构造结果对象。在您的示例中:
mod = sm.tsa.DynamicFactor(endog, k_factors=1, factor_order=2, error_order=2)
initial_res = mod.fit(method='powell', disp=False)
res = mod.fit(initial_res.params)
res.params.to_csv(...)
# ...later...
params = pd.read_csv(...)
res = mod.smooth(params)