statsmodels 的 MLEModel 类是否使用期望最大化进行拟合?

问题描述

我正在使用 statsmodels' MLEModel 类构建自定义统计空间模型,并使用 .fit() 方法拟合未知参数。我认为它正在使用期望最大化,但我不确定这一点,我在文档中找不到任何提示。而且,.fit() 方法的详细输出显示了单个优化的步骤,这让我更加怀疑。

如果它不使用 EM,它在做什么?也许我在这里遗漏了一些东西,但我认为对于具有隐藏变量的模型(如状态空间模型),您不能直接最小化可能性(因为您不知道也没有观察到隐藏状态)。

感谢您的建议

解决方法

默认情况下,MLEModel 使用拟牛顿方法在数值上找到使似然函数最大化的参数。最终,它依赖于 Scipy minimize 函数。默认算法是 BFGS algorithm,但您可以使用 method 参数选择其他算法。例如,method='nm' 使用 Nelder-Mead algorithm

Statsmodels 状态空间框架提供了使用 EM 算法的所有工具(例如适当的平滑器),但您必须自己实现它。例如,EM 算法是用于拟合 DynamicFactorMQ 模型的默认方法,因为它具有大量参数,而对于此类问题,拟牛顿方法可能很慢且不可靠。

,

一般来说,fit() 是模型类的一个方法。根据类对象,将调用该类中的 fit() 方法。通常,fit() 估计参数 via maximum likelihood 并返回结果对象。

如果我没记错的话,expectation maximization (EM) 算法需要并使用 Kalman smoother 用于带有隐藏变量的模型。

编辑:fit() 将校准其父类的 fit(),在本例中为 tsbase.TimeSeriesModel,如 class MLEModel(tsbase.TimeSeriesModel) 所示。反过来,class TimeSeriesModel(base.LikelihoodModel) 将调用其父类 base.LikelihoodModelclass LikelihoodModel(Model)'s fit() function 默认方法参数是 'newton'。因此,最大似然 (ML) 估计将在此自定义状态空间模型中使用牛顿方法进行估计。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...