如何解决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.LikelihoodModel
。 class LikelihoodModel(Model)'s fit() function
默认方法参数是 'newton'
。因此,最大似然 (ML) 估计将在此自定义状态空间模型中使用牛顿方法进行估计。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。