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

is statsmodels' MLEModel class using Expectation Maximization for fitting?

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

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

感谢任何建议

一般来说,fit()是模型class的一个方法。根据 class 对象,来自 class 的方法 fit() 将被调用。通常,fit() 估计参数 via maximum likelihood 和 return 结果对象。

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

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

默认情况下,MLEModel 使用拟牛顿法从数值上找到使似然函数最大化的参数。最终,它依赖于 Scipy minimize function. The default algorithm is the BFGS algorithm, but you can select others using the method argument. For example, method='nm' uses the Nelder-Mead algorithm.

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